aamva-parser
Version:
Plugin to parse AAMVA Drivers License Data from the PDF417 barcode
176 lines (156 loc) • 13.8 kB
Markdown
## Installation
Install through npm
```bash
npm install aamva-parser
```
## Usage
```js
import { Parse, IsExpired, GetVersion } from "aamva-parser"
// Ask the parser to parse it
const parsedLicense = Parse(data: pdf417Data)
// Checks is the License is expired. Returns a boolean
const isValidLicense = IsExpired(data: pdf417Data);
// Checks is the AAMVA Version. Returns a string
const aamvaVersion = GetVersion(data: pdf417Data);
```
### Supported Fields
| Name | Description | Type | `ParsedLicense` Attribute |
|:-----------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------------|:-------|:--------------------------|
| First Name | Customer First Name | String | `firstName` |
| Last Name | Customer Last Name | String | `lastName` |
| Middle Name | Customer Middle Name | String | `middleName` |
| Expiration Date | Document Expiration Date | NSDate | `expirationDate` |
| Issue Date | Document Issue Date | NSDate | `issueDate` |
| Date of Birth | Customer Date of Birth | NSDate | `dateOfBirth` |
| Gender | Customer Gender | Enum | `gender` |
| Eye Color | Customer Eye Color | Enum | `eyeColor` |
| Hair Color | Customer Hair Color | Enum | `hairColor` |
| Height | Customer Height (in inches) | Double | `height` |
| Street Address | Customer Street Address | String | `streetAddress` |
| Second Street Address | Customer Street Address Line 2 | String | `streetAddressSupplement` |
| City | Customer City | String | `city` |
| State | Customer State | String | `state` |
| Postal Code | Customer Postal Code | String | `postalCode` |
| Drivers License ID | Unique DL # ID Number | String | `driversLicenseId` |
| Document ID | Unique Document ID Number | String | `documentId` |
| Issuing Country | Issuing Country | Enum | `issuingCountry` |
| Middle Name Truncation | Was Middle Name truncated? | Enum | `middleNameTruncation` |
| First Name Truncation | Was First Name truncated? | Enum | `firstNameTruncation` |
| Last Name Truncation | Was Last Name truncated? | Enum | `lastNameTruncation` |
| Place of Birth | Country and municipality and/or state/province | String | `placeOfBirth` |
| Audit Information | A string of letters and/or numbers that identifies when, where, and by whom a driver license/ID card was made. | String | `auditInformation` |
| Inventory Control | A string of letters and/or numbers that is affixed to the raw materials (card stock, laminate, etc.) used in producing driver licenses and ID cards. | String | `inventoryControlNumber` |
| Last Name Alias | Other Last Name by which cardholder is known. | String | `lastNameAlias` |
| First Name Alias | Other First Name by which the cardholder is known. | String | `firstNameAlias` |
| Suffix Alias | Other suffix by which cardholder is known | String | `suffixAlias` |
| Name Suffix | Name Suffix | Enum | `suffix` |
| Weight (lbs) | Weight in lbs | string | `weight` |
### AAMVA Element IDs
Below is a table of AAMVA Element Ids and the fields to which they map by AAMVA Version.
**bold** = Mandatory Field
`--` = not included in this version of the standard
| Field | Version 1 | Version 2 | Version 3 | Version 4 | Version 5 | Version 6 | Version 7 | Version 8 | Version 9 | Supported |
|:-----------------------|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|:---------:|
| First Name | DAC | **DCT** | **DCT** | **DAC** | **DAC** | **DAC** | **DAC** | **DAC** | **DAC** | Y |
| Last Name | DAB | **DCS** | **DCS** | **DCS** | **DCS** | **DCS** | **DCS** | **DCS** | **DCS** | Y |
| Middle Name | DAD | **DAD** | **DAD** | **DAD** | **DAD** | **DAD** | **DAD** | **DAD** | **DAD** | Y |
| Expiration Date | **DBA** | **DBA** | **DBA** | **DBA** | **DBA** | **DBA** | **DBA** | **DBA** | **DBA** | Y |
| Issue Date | **DBD** | **DBD** | **DBD** | **DBD** | **DBD** | **DBD** | **DBD** | **DBD** | **DBD** | Y |
| Date of Birth | **DBB** | **DBB** | **DBB** | **DBB** | **DBB** | **DBB** | **DBB** | **DBB** | **DBB** | Y |
| Gender | **DBC** | **DBC** | **DBC** | **DBC** | **DBC** | **DBC** | **DBC** | **DBC** | **DBC** | Y |
| Eye Color | DAY | **DAY** | **DAY** | **DAY** | **DAY** | **DAY** | **DAY** | **DAY** | **DAY** | Y |
| Height (inches) | DAU | **DAU** | **DAU** | **DAU** | **DAU** | **DAU** | **DAU** | **DAU** | **DAU** | Y |
| Street Address | **DAG** | **DAG** | **DAG** | **DAG** | **DAG** | **DAG** | **DAG** | **DAG** | **DAG** | Y |
| City | **DAI** | **DAI** | **DAI** | **DAI** | **DAI** | **DAI** | **DAI** | **DAI** | **DAI** | Y |
| State | **DAJ** | **DAJ** | **DAJ** | **DAJ** | **DAJ** | **DAJ** | **DAJ** | **DAJ** | **DAJ** | Y |
| Postal Code | **DAK** | **DAK** | **DAK** | **DAK** | **DAK** | **DAK** | **DAK** | **DAK** | **DAK** | Y |
| Drivers License ID | **DBJ** | **DAQ** | **DAQ** | **DAQ** | **DAQ** | **DAQ** | **DAQ** | **DAQ** | **DAQ** | Y |
| Document ID | `--` | **DCF** | **DCF** | **DCF** | **DCF** | **DCF** | **DCF** | **DCF** | **DCF** | Y |
| Issuing Country | `--` | **DCG** | **DCG** | **DCG** | **DCG** | **DCG** | **DCG** | **DCG** | **DCG** | Y |
| Middle Name Truncation | `--` | **DDG** | `--` | **DDG** | **DDG** | **DDG** | **DDG** | **DDG** | **DDG** | Y |
| First Name Truncation | `--` | **DDF** | `--` | **DDF** | **DDF** | **DDF** | **DDF** | **DDF** | **DDF** | Y |
| Last Name Truncation | `--` | **DDE** | `--` | **DDE** | **DDE** | **DDE** | **DDE** | **DDE** | **DDE** | Y |
| Second Street Address | DAH | DAH | DAH | DAH | DAH | DAH | DAH | DAH | DAH | Y |
| Hair Color | DAZ | DAZ | DAZ | DAZ | DAZ | DAZ | DAZ | DAZ | DAZ | Y |
| Place of Birth | `--` | `--` | DCI | DCI | DCI | DCI | DCI | DCI | DCI | Y |
| Audit Information | `--` | `--` | DCJ | DCJ | DCJ | DCJ | DCJ | DCJ | DCJ | Y |
| Inventory Control | `--` | `--` | DCK | DCK | DCK | DCK | DCK | DCK | DCK | Y |
| Last Name Alias | DBO | DBN | DBN | DBN | DBN | DBN | DBN | DBN | DBN | Y |
| First Name Alias | DBP | DBG | DBG | DBG | DBG | DBG | DBG | DBG | DBG | Y |
| Suffix Alias | DBR | `--` | DBS | DBS | DBS | DBS | DBS | DBS | DBS | Y |
| Name Suffix | DBN | **DCU** | DCU | DCU | DCU | DCU | DCU | DCU | DCU | Y |
| Weight (lbs) | `--` | DAW | DAW | DAW | DAW | DAW | DAW | DAW | DAW | Y |
### Example of a raw driver's license payload
Version 8 Example License Data
```
@
ANSI 636026080102DL00410288ZA03290015DLDAQD12345678
DCSPUBLIC
DDEN
DACJOHN
DDFN
DADQUINCY
DDGN
DCAD
DCBNONE
DCDNONE
DBD08242015
DBB01311970
DBA01312035
DBC1
DAU069 in
DAYGRN
DAG789 E OAK ST
DAIANYTOWN
DAJCA
DAK902230000
DCF83D9BN217QO983B1
DCGUSA
DAW180
DAZBRO
DCK12345678900000000000
DDB02142014
DDK1
ZAZAAN
ZAB
ZAC
```
### Example Response from payload
```js
{
auditInformation: null,
city: "ANYTOWN”,
country: "United States”,
dateOfBirth: Sat Jan 31 1970 00:00:00 GMT-0700 (Mountain Standard Time),
documentId: "83D9BN217QO983B1”,
driversLicenseId: “D12345678”,
expirationDate: Wed Jan 31 2035 00:00:00 GMT-0700 (Mountain Standard Time),
expired: false,
eyeColor: "Green”,
firstName: "JOHN”,
firstNameAlias: null,
firstNameTruncation: "None”,
gender: "Male”,
hairColor: "Brown”,
height: 69,
inventoryControlNumber: "12345678900000000000”,
issueDate: Mon Aug 24 2015 00:00:00 GMT-0700 (Mountain Standard Time),
lastName: "PUBLIC”,
lastNameAlias: null,
lastNameTruncation: "None”,
middleName: "QUINCY”,
middleNameTruncation: "None”,
pdf417: "@\n\n ANSI 636026080102DL00410288ZA03290015DLDAQD12345678\n DCSPUBLIC\n DDEN\n DACJOHN\n DDFN\n DADQUINCY\n DDGN\n DCAD\n DCBNONE\n DCDNONE\n DBD08242015\n DBB01311970\n DBA01312035\n DBC1\n DAU069 in\n DAYGRN\n DAG789 E OAK ST\n DAIANYTOWN\n DAJCA\n DAK902230000 \n DCF83D9BN217QO983B1\n DCGUSA\n DAW180\n DAZBRO\n DCK12345678900000000000\n DDB02142014\n DDK1\n ZAZAAN\n ZAB\n ZAC1”,
placeOfBirth: null,
postalCode: "902230000”,
state: "CA”,
streetAddress: "789 E OAK ST”,
streetAddressSupplement: null,
suffix: "Unknown”,
suffixAlias: null,
version: "08”,
weight: “180”
}
```
### Credits
Inspired from the Swift version found at https://github.com/ksoftllc/license-parser