The QR Code is a way to store data in a pixelated black and white image. Some phones and other devices equipped with barcode scanning capabilities are able to scan these two-dimensional barcodes and decode their content. Content can be web links, contact information, plain text, binary files, and just about anything under around 1K to 8K depending on the content type.
Most drivers' licenses have at least a normal barcode or a magnetic strip to allow the quick reading of an identification number. I had considered the possibility of creating a protoype concept of an ID card using QR Codes instead of plain, human-readable text or RFID.
Let's talk about RFID for a moment. There has been some discussion about standardizing ID cards in the U.S. and RFID was one consideration for part of the new standard. RFID, however, would be relatively easy for hackers to come within close proximity to the card holder and obtain their data (theoretically). While RFID may or may not still be part of the standardization concept, using optical codes that would be difficult to scan without a direct, close view of the card seemed like a better alternative.
To create a concept ID badge, I wanted to automate as much of the process as possible. With a Linux development system in-house, I could install libraries and programs that wouldn't have been available on the live server.
First, the form asks for standard information that one would find on an ID; some of this info should not be offered publicly!
To make the ID look cool and possibly add useful information, the user uploads four files in addition to their personal info. The first is a photo of themselves, which is preferably a passport-friendly portrait. Next is a scan of their right thumb (or any finger if they unfortunately had lost that). Obtaining fingerprint scans is easy if you have a flat-bed scanner; just press (lightly!) against the glass, hold your hand steady, scan, de-saturate the image, and then adjust the contrast until the prints become sufficiently visible.
The user also uploads a scan of their signature and a .wav audio file of their voice speaking the word "voice print". Now, the fun stuff happens.
As stated before, having a local machine allows me to install programs for the script to call upon. The first is SoX, which is a very handy tool for working with audio in a script or from the command line. I use this to generate the "voiceprint" spectrogram located directly underneath the photo section on the badge.
Unique characteristics in a person's voice can be visualized by using a spectrogram of their speech. I also used SoX to resample the audio after generating the spectrogram, to reduce audio bandwidth, and ran the audio through Speex to encode ultra-compact audio data. The audio data is then encoded on the right-hand size QR Code box on the bottom ID version seen on the left.
The left-hand QR-Code box contains uncompressed, comma-delimited data. There are two versions of the badge; the top one is for exchanging information with people I meet in person (provided that they use a scanner on their phone) and the bottom one is the concept for an ID that contains personal information.
After printing the two versions of the concept ID badge, it was a relief to find that all of the QR code blocks scanned without any trouble. The regular bar codes, however, were printed too small and the scanner could not read them. Printing at a higher dpi should fix the problem although to keep the badges at a standard business card size would mean making the bar codes larger in the card layouts. It's still in the early stages.
After scanning the badges, I processed the resulting text to make sure that there were no errors. The plain text data was usable as contact data on the phone immediately; the phone numbers and e-mail address could be instantly used to make contact.
The voice print data, once decoded (base 64 encoding a la e-mail attachments and then opened as a gzip archive) yielded an intact speex audio file that played back without any trouble.
Some people already use QR codes on their business cards. I still have a whole box of business cards so I don't plan on having a new batch printed up just to add a QR code. It will be fun if I ever run into anyone, such as a potential client, whom I can invite to scan my contact card in order to add my information to their phone's contact list without a single keystroke. They will, of course, also receive one of my normal business cards.