MagRead on Symbian^3

First off, let me start by providing a link to a Symbian^3 binary for MagRead.  It can be found here.   See the bottom of this post for some more details on this.

I’ve previously shown screenshots of MagRead running in Maemo on the N900 device.  This post will feature some pictures of MagRead on Symbian^3 using a Nokia C7 device.  At the bottom is a link to the program for Symbian, so those of you with a dongle can try it yourself.

The application has now been tested on the Nokia C7 and Nokia N8 phones.

First up is the intro screen:

The home screen for MagRead on Symbian^3
The home screen for MagRead on Symbian^3

It’s rather simple at the moment, but intended to not overly clutter the interface.  More than just screenshots, here’s a picture of this on the Nokia C7:

The Nokia C7 running MagRead

Now with the program actually running.  Here’s a screenshot of it having read an American Express card, followed by a picture of the C7 and the card next to it:

An Amex card as read by MagRead
The Nokia C7 with the Amex card it just read

The picture shows the application reoriented into landscape mode, where it changes the layout slightly to better fit the new screen resolution.

When a card that is expired is swiped, MagRead also notes it by printing the expiration date in red:

An expired Visa card in MagRead

In addition to credit cards, MagRead is also able to parse cards that comply with AAMVA standard — that is, identification/driver licence cards from the US and Canada that have magnetic stripes.  Here is my California driver licence:

A California DL in MagRead

For anything other than a credit card or AAMVA-compliant card, MagRead will simply show the data as it is written on the card.  Here’s an example using a membership card:

A membership card read by MagRead

The last big feature of MagRead in its current state is the ability to show partial reads.  This is when a part of the stream can be decoded, but it fails one or more checksums.  Here’s the Visa card from above with a failed swipe, showing most of the data stored on the stripe:

A partial swipe in MagRead

The red character indicates that a checksum failed there.  Any characters to the right of a failed checksum may also be invalid.  Nonetheless, this swipe shows the complete card number and its expiration date (in YYMM format after the field separator).

Note that all credit card numbers shown are in fact invalid.  The cards are old ones that had been compromised, and the numbers reissued.

I am now able to offer a self-signed package for MagRead.  It can be found here.  The package is version 0.1.3 (or 0.1(3), as shown in Symbian), and is the one demonstrated above.

There will be a security warning when installing, noting that it is not from a trusted source.  Additionally, you’ll be asked to authorize the application to access the “camera or microphone”.  This is required in order to record from the audio dongle (the camera is not touched).  Those who don’t wish to trust me can use the Nokia Qt SDK to build the application from source themselves, and verify that what they’re installing does nothing malicious.

No information read by MagRead is ever saved onto the device or transferred over the network.  Once it disappears from the screen, it’s gone.  I will not be offering any application that doesn’t follow this principle.

Tips on using MagRead

As the user base has increased (ie, became existent), I’ve realized that it would be best to give a few usage tips for MagRead.

  • For Maemo 5, you can download the program from extras-testing.  It’s entered as “magread”, and the package overview can be found here.  The source code for the program, as compiled by Nokia’s Maemo buildhost, can be found from there as well.
  • For Symbian, Windows, OS X and Linux, there are presently no binary packages provided.  I intend to provide some later, but at present you need to compile them yourself.
  • The code for the project, along with the bugtracker, is hosted by github.  The github project page is here.
  • The program is capable of reading swipes in either direction.  However, the success rate of swipes will get even better if you swipe the card in the same direction as the data is written.  This would be from right to left, with the card oriented such that the magnetic stripe is on top and facing you.
  • MagRead in no way saves or transfers any information that it records.  The open source nature of the program allows anyone to verify this, which I welcome anyone to do.
  • The Square dongle is only compatible with audio jacks wired for headsets.  That is, audio jacks that support mono input and stereo output, as found on mobile phones.  I’ve run into some Mac Book Pros that have compatible audio jacks, and some Thinkpads.
  • The Square dongle is configured to read track 2 only.  For more reference on what this means, see this.
  • The Square dongle can read track 1, however you must offset the card from the read head by an additional 2.79mm (.110in).  This can be accomplished by simple adding a wedge into the track.  People have also had success in just holding the card slightly off the base while swiping.
  • If you swipe a card, and it doesn’t even give a “bad swipe” error, then the track you’re reading is blank.  I’ve experienced this with several store cards, and hotel keys.  If it repeatedly gives a bad swipe error, try reversing the direction and varying the speed.  It may be damaged, or it may be in an unsupported encoding format.
  • mslib, which provides the decoding support for MagRead, only supports two encoding schemes (ABA and IATA).  While they are by far the most common encoding schemes, there may be proprietary ones you come across.  In the event you do come across such a card, mslib will still give a valid bit sequence.  However, it won’t be able to decode the bits into characters.  At present (v1.3-01), MagRead is unable to show you this bit sequence.
  • There is a checkbox on the screen marked “Show Partial Data”.  This relaxes the checksum verification to allow for partial reads to be displayed.  Any swipe with a known start sentinel will have its data shown, with characters that pass checksum displayed, regardless of whether the LRC is valid.  You do not need to stop recording to enable this.
  • You do not need to return to the home screen in order to read another card.  The application will continue listening for card swipes until you press the “Stop” button.

I’ll add more tips to this page as questions are asked of me, or as they come to mind.  There are features presently in the git repository that are not in Maemo’s extras-testing package (v1.3-01).  When I push out the updated version in the near future, I’ll be updating this page to reflect the new features (most of which are custom settings configuration).

Feel free to ask me questions via the comments section, email, IRC or other means.