aamva

Parse AAMVA magnetic stripe

Usage no npm install needed!

<script type="module">
  import aamva from 'https://cdn.skypack.dev/aamva';
</script>

README

aamva.js

small helper library that provides one an ability to parse AAMVA magnetic stripe. regex was created based on 2012 spec

NOTE: To support this effort, please contribute swipe streams for unsupported types and I would love to add support or fix things that are not working yet

Installation

  npm install aamva -g

Usage

  // Generate SSN from random state
  var aamva = require('aamva');

  var stripe_data = '%FLDELRAY BEACH^DOE$JOHN$^4818 S FEDERAL BLVD^           \?\
  ;6360100462172082009=2101198299090=?\
  #! 33435      I               1600                                   ECCECC00000?';

  var barcode_data = '@ANSI 6360100102DL00390190ZF02290063DLDAADOE,JOHNDAG5929 N \
  ROCK STDAIDELRAY SHOREDAJFLDAK44556-     DAQJ621625830080DARI   DAS          \
  DAT     DBA20210108DBB19770204DBC1DBD20120612DBHN         DAU600ZFZFAREPLACED\
  : 00000000ZFB ZFCP771206120090ZFD ZFE07-01-11
  ';

  var res = aamva.stripe(stripe_data);
  console.log("DMV ID:",res.id()); /* D621720820090 */
  console.log("First name:",res.name().first); /* JOHN */
  console.log("Last name:",res.name().last); /* DOE */
  console.log("Middle name:",res.name().middle); /* "" */
  console.log("Sex:",res.sex()); /* MALE, FEMALE, MISSING/INVALID */
  console.log("DOB:",res.birthday()); /* Thu Jan 08 1987 00:00:00 GMT-0500 (EST) */
  console.log("Entire object", res);

  var res2 = aamva.pdf417(barcode_data);
  console.log("DMV ID:",res2.id()); /* D621720820090 */
  console.log("First name:",res2.name().first); /* JOHN */
  console.log("Last name:",res2.name().last); /* DOE */
  console.log("Middle name:",res2.name().middle); /* "" */
  console.log("Sex:",res2.sex()); /* MALE, FEMALE, MISSING/INVALID */
  console.log("DOB:",res2.birthday()); /* Thu Jan 08 1987 00:00:00 GMT-0500 (EST) */
  console.log("Entire object", res2);

/*
  output:
        { state: 'FL',
          city: 'DELRAY BEACH',
          name: [Function],
          address: '4818 S FEDERAL BLVD',
          iso_iin: '636010',
          dl: '0462172082009',
          expiration_date: '2101',
          birthday: [Function],
          dl_overflow: '0',
          cds_version: '#',
          jurisdiction_version: '!',
          postal_code: '33435      ',
          class: 'I ',
          klass: 'I ', // same as 'class'
          restrictions: '          ',
          endorsments: '    ',
          sex: [Function],
          height: '600',
          weight: '   ',
          hair_color: '   ',
          eye_color: '   ',
          misc: '                          ECCECC00000',
          id: [Function] }
*/

Tests

  npm test

Contributing

If you find a bug or willing to add some enhancement, pull requests are very welcome

Release History

  • 0.0.1 Initial release
  • 0.0.2 changed sex to a function
  • 0.0.3 accounted for weird space characters
  • 0.0.5 removed logging that was left by mistake
  • 0.0.7 inflated birthday to a Date object, and fixed FL AAMVA spec, where expiration month is set to birthday month
  • 0.0.8 removed debug statements
  • 0.0.9 changed birthday to utc date
  • 0.0.10 fixed typo
  • 0.0.11 added TX support
  • 0.0.12 fixed duplicate name key
  • 0.0.13 added pdf417 support, added example page, and changed plugin to be compatible with browser
  • 0.0.16 fixed version regex for pdf417, and added MD tests.

License

BSD-3-Clause