UNPKG

aamva-parser

Version:

Plugin to parse AAMVA Drivers License Data from the PDF417 barcode

98 lines (97 loc) 3.32 kB
import { FieldParser } from '../fieldParser'; import { VersionOneFieldMapper } from './versionOneFieldMapper'; import { NameSuffix } from '../../enums/nameSuffix'; export class VersionOneFieldParser extends FieldParser { constructor(data) { super(data, new VersionOneFieldMapper()); } getDateFormat() { return "yyyyMMdd"; } parseFirstName() { const firstName = this.parseString("firstName"); return firstName || this.parseDriverLicenseName("firstName"); } parseLastName() { const lastName = this.parseString("lastName"); return lastName || this.parseDriverLicenseName("lastName"); } parseMiddleName() { const middleName = this.parseString("middleName"); return middleName || this.parseDriverLicenseName("middleName"); } parseHeight() { const heightInFeetAndInches = this.parseString("height"); if (!heightInFeetAndInches) return null; const height = this.regex.firstMatch("([0-9]{1})", heightInFeetAndInches); const inches = this.regex.firstMatch("[0-9]{1}([0-9]{2})", heightInFeetAndInches); if (!height || !inches) return null; const calculatedHeight = (parseFloat(height) * 12) + parseFloat(inches); if (heightInFeetAndInches.includes("cm")) { return Math.round(calculatedHeight * FieldParser.INCHES_PER_CENTIMETER); } else { return calculatedHeight; } } parseNameSuffix() { let suffix = this.parseString("suffix") || this.parseDriverLicenseName("suffix"); if (!suffix) return NameSuffix.Unknown; switch (suffix) { case "JR": return NameSuffix.Junior; case "SR": return NameSuffix.Senior; case "1ST": case "I": return NameSuffix.First; case "2ND": case "II": return NameSuffix.Second; case "3RD": case "III": return NameSuffix.Third; case "4TH": case "IV": return NameSuffix.Fourth; case "5TH": case "V": return NameSuffix.Fifth; case "6TH": case "VI": return NameSuffix.Sixth; case "7TH": case "VII": return NameSuffix.Seventh; case "8TH": case "VIII": return NameSuffix.Eighth; case "9TH": case "IX": return NameSuffix.Ninth; default: return NameSuffix.Unknown; } } parseDriverLicenseName(key) { const driverLicenseName = this.parseString("driverLicenseName"); if (!driverLicenseName) return null; const namePieces = driverLicenseName.split(','); switch (key) { case "lastName": return namePieces[0] || null; case "firstName": return namePieces[1] || null; case "middleName": return namePieces[2] || null; case "suffix": return namePieces[3] || null; default: return null; } } }