I first learned about 2D barcodes at Mobile WebCamp in Filip Borloo's presentation “The dead of the URL?” where he showed alternatives for traditional URLs. One of his most striking examples was the use of 2D barcodes near Japanese bus stops where people use their phones to take a picture of a 2D barcode which brings them to a mobile webpage where they can find the bus schedule for their location. Another one is the 2D barcode on an egg in the supermarket so that you can track the origin, again, a simple URL to a webpage with the egg's ‘history’.
I've been waiting for an iPhone application that would decode these codes and take some action based on their contents. Barcode was first but a simple search in the AppStore revealed 5 other applications as well... time for a round up.
|Name||Developer||Supported codes||Supported actions|
|2D Sense||2D Sense, Inc||QR code, DataMatrix and ShotCode||Open URL, call phone numbers|
|Barcode||Stefan Hafeneger||QR code and DataMatrix||Save results, open URL, send mail, call phone number and show content|
|iDecode||Haploid||QR code and DataMatrix||Open URL|
|NeoReader||NeoMedia Technologies, Inc.||QR code, DataMatrix and Aztec|
All applications have troubles with decoding barcodes that are not perfectly scanned. I don't know if this has anything to do with the quality of the iPhone camera or the decoding algorithms but it's frustrating to scan a code multiple times without success. The following reviews are sorted according to my preferences, the best ones first:
The oldest application out there but still one of my favorites. The ‘Choose you code type’ screen shows an example code which makes the interface much more intuitive as most of the other apps: I don't need to know if I'm scanning a QR or DataMatrix code but I do recognize the patterns. Barcode lets you take a picture or select one from the iPhoto library which means I can scan one from a saved image from a website, nice! Small remark here: it would be better if you could scale the codes smaller as the image size as it's impossible to scan some larger codes. Once scanned it shows the message as shown in the screenshot. You can now select an action (save the result, open an URL, send mail or call a phone number) from the toolbar at the bottom. One of the best barcode scanners for the iPhone in my opinion.
This one is loaded with features and recognizes the most different code types which is a huge advantage: I don't want to keep different code scanners in case I would need one or the other. It does ask to use you location which I don't really understand, why does a barcode scanner needs my location? It seems that there is an online service connected with this app but I didn't look into that.
A nice little barcode scanner with no overhead. It only scans QR codes and DataMatrices and the decoding process is slow. There is also no ‘history’ feature with previously scanned codes so I would go for Barcode or 2D Sense.
The only app that supports the Aztec code so it may be your only choice if you need this but, that said, it's a confusing application. It has an option where you can enter a code which brings you to the Wikipedia article for the ‘code’ you enter... no idea what it's doing there?! There is also no feedback when you take a picture and no barcode is found, it should. You can enter your country, gender and age in the settings screen but why?! Not my favorite barcode scanner as you might have guessed.
ScanLife only supports it's own licensed EZcode which you can create on the ScanLife website (after registration). The app keeps a history of scanned codes and you can pick your favorites. It may be useful if you need to scan EZcodes as this is the only app that supports these but I need more flexibility. The application takes you to a survey form after scanning your first code which feels too much like invading my privacy (why do they need my yearly income for?). I removed it right away.
As a nice added bonus all these apps are free so time to try out and decide what suits you best!
This post is open source. Did you spot a mistake? Ideas for improvements? Contribute to this post via Github. Thank you!