A friend asked me to make a loyalty card app for their store, so that the customer gets something for free for every n-th purchase.

What is the best way to do this that can not be faked by the customer?

  • The customer scans a QR code in the store with his phone?
  • The clerk scans a QR code on the customers's phone with a web camera?
  • Other ways?

The point is that it must be very easy (ie. a good user experience) for the customers to do this.

Suggestions that add something fun to the experience would be interesting too, like taking a photograph of the clerk and a wall calendar in the background, just to pull a wild idea.

  • If you search for "qr code generator", you get back a lot of results. A user who is serious about getting fake purchase credits will have no trouble doing so. From a UX perspective, this is a sound choice. If your concern is with security, you're probably better off talking to someone with a security background.
    – cimmanon
    Commented Oct 10, 2013 at 19:31
  • No, security is not a high priority, though it shouldn't be dead easy to fake a purchase. Second, I'm not asking specifically for a QR solution. I'm asking how the purpose (counting purchases) can be done in general? In a fun way, if possible.
    – forthrin
    Commented Oct 10, 2013 at 20:12
  • You still have to have something you can reasonably be able to program. QR or bar codes make sense because they are easy to generate, decode, and validate. A picture of a clerk and a calendar? Not so easy to validate.
    – cimmanon
    Commented Oct 10, 2013 at 20:23
  • 4
    Why the arbitrary choice of an app, when the simple Card-and-ten-stamps systems would work perfectly well - and does so for several famous coffee chains?
    – Fractional
    Commented Nov 18, 2013 at 16:01
  • I've seen this done with a QR code on a stand kept below the counter. You had to ask for the code, and the clerk was responsible for not letting you scan unless you bought something. Commented Nov 18, 2013 at 19:35

3 Answers 3


There's no need to over-engineer a loyalty system - there is a really cheap and simple app for loyalty bonuses at every n-th purchase:

Card and ink!

enter image description here

A simple web search for 'Loyalty Stamps' will give you a wide choice of stamps to choose from. The main benefit of keeping is simple is that you avoid ALL of the downsides of trying to use technology (development costs, bugs, exclusion of customers without smartphones, to name but a few).

  • 5
    This is by far the best solution unless you are planning on taking full advantage of digital technology (i.e., tracking user purchases and data mining them to offer personalized rewards, etc.) Commented Nov 18, 2013 at 16:42

A QR code or an EAN bar code or something similar is fine, but in order to provide validation so it can't be faked, you need some server-side processing which links the user to his purchase.

The rest of this answer is out of scope in terms of UX, but here goes anyway...

The till receipt generates a QR code which contains data like the till receipt number. The app adds the phone identity and contacts the store server (via a web URL, perhaps). The store's server validates the till receipt (valid number which has been issued and not uploaded before) and stores the customer's purchase using the phone identity to identify the customer.

When the customer claims his free gift, use the server-side records to validate that he's entitled to it.

The crucial part for security is that nothing is left in the control of the user. Everything is on the store's servers. The only part which the user has any control over is whether he scans the code on the right phone, or at all.

A standard store loyalty-card scheme which is handled by the checkout clerk does the same thing: the customer hands over his card and the record of his purchases is held by the store along with his card number. All that is in the control of the customer is whether he hands his card over for his purchases to be recorded against it.


Whatever you do, don't go for the second solution.

Scanning a QR code off a phone display is hard. Different types of display have different resolution, brightness, reflectivity, polarization, etc. Using a web camera to recognize the image from a backlit phone display is a very different beast from recognizing the same image printed on paper or other non-emitting surface. If you try to implement it, you will have to invest lots of time for it to work well. I wouldn't even recommend it for large projects due to its brittleness and error proneness; implementing it in a quick solution is just impossible.

You might want to look into technologies beyond QR. NFC could be an option, but doesn't have much penetration yet.

Not the answer you're looking for? Browse other questions tagged or ask your own question.