My town is running a contest. You get one entry for every time you shop local, and the main entry method is writing your contact info on the back of your receipt and dropping that off in a ballot box. That's a pretty good user experience I think. BUT my employer also wants people to be able to enter online. The basic idea is that they fill out an online form, if they are chosen they have to show us the receipt that has the info they entered.

How can I make this work? The prizes are pretty big, so we need to take entering with the same receipt multiple times seriously.

Taking a picture is easy to do now that everyone who uses the internet is on smartphones. But from there how could you easily detect duplicates? The receipts can be entered over an entire month, so I imagine some people will enter dozens of times without breaking the rules.

Typing in information is tedious, and I'm not sure if there is enough standardization of receipt info for it to work at all. Does every receipt have a 'number'? Or a timestamp?

Any advice or ideas are welcome.

  • You only need to check for duplicates if they get picked, so that cuts down on the effort involved making manual checking feasible.
    – Erics
    Nov 13, 2013 at 8:28

5 Answers 5


Have the customer write a word or number on the back of their receipt when they enter online, you can give them one, or they can choose themselves if you prefer.

When you select a winner, they must be able to show you the receipt with the associated word/number on the back. Do not tell the winner the word/number you are expecting, so they cannot quickly write it on, and could not enter multiple times.

Only hole is the customer might not write on receipt and enter multple times, but if you suspect this you could ask them to show ALL the receipts they entered. Actually for various reasons you might want to see all the winners receipts, and check that winning receipt was issued from a retailer (confirm with the retailer) as I can create realistic looking receipts pretty easily. You know how many times they entered as contact details will be similar.


Do you have control on how the receipts are print? If you do, you could generate a QRCode with an unique ID per receipt.

Then, the best approach would be to create a simple app that users would use to capture the QRCode. The app would send the data without further interaction. If you do not want to spend time creating the app, you could ask users to simply take a picture of the receipt (with the QRCode in it) and send it via a form. You would be able to process the QRcode at the server side.

Another possibility is reading other already built-in marks that receipts usually have (even barcodes).


Luiz' QR code would be great, but likely a daunting task to get all the participants to add it to their receipt.

Instead, I'd have people enter a unique identifier that would be universal to all the receipts. The first thing that comes to mind would be the date/time.

Yes, having to enter the date and times into a field is tedious, but certainly not as tedious as leaving the house to go find the entry box.


There are two parts to your question. After re-reading your question realised that your contest may be working with multiple shops in your town, so changing the way the receipts are printed may not be in your control. Eitherways I have written below about the QR code in response to Luiz Viera's answer - you can disregard that bit and only look at the manual online entry method.

Part 1 - letting customers enter the contest from their smartphone

Then, the best approach would be to create a simple app that users would use to capture the QRCode.

No custom app needed - if you do this you risk targeting only customers using certain smartphones (i.e. iOS and Android). Many smartphones already come with a QR code reader app.

Make the QR code an URL to the online form with a GET parameter of the receipt number (e.g. http://www.contest.com/entry-form?receipt=123456).

This will pre-fill the form with the receipt number, and the customer will only need to type in their details and hit Submit.

Obviously, you will also need to show the receipt number and the URL to enter the contest if they don't have a smartphone, or want to do it from their desktop/laptop computer, i.e.


download bmml source – Wireframes created with Balsamiq Mockups

Part 2 - making sure customers don't enter multiple times

The prizes are pretty big, so we need to take entering with the same receipt multiple times seriously.

If the customer uses the QR code method, the web server would be able to check if that receipt number has been entered already. If it has been entered, instead of showing the form, you can straightaway show a message saying "you have already entered with this receipt. Good luck!"

For those who don't use the QR code and manually go to the website and type in their receipt number, you will still need to have some sort of validation on the server-side to prevent multiple entries using the same receipt number, and if the receipt number has already been entered, show an error message after they submit the form.


Just ask the people to upload a picture, period. Even people who have a nonsmart-phone should be able to easily do that. And the people completely without a phone surely have a camera somewhere.

The duplicate part shouldn't be a problem at all. Each receipt has unique information on it.


You have two ways to recognize uniqueness

  • A combination of store, terminal number, and time; if not unique, add items. Practically nobody gets two receipts from the same store in the same minute. In the rare case where this happens, the items will be different (e.g. because someone bought multiple items, but wanted to pay some of them with private money and others with funds of some organisation he belongs to).
  • Find out if there is a unique number to the receipt or transaction, then a combination of the store and transaction number will suffice. On my picture, the TA-Nr in the middle (just below Terminal-ID) and the unlabeled 7-digit number in the lower right are good candidates.

If you have a very small number of stores/chains participating, you could create an OCR system which knows where to look for the unique data on the receipt of each store, and automatically bar people from uploading the same receipt twice. But this is quite a lot of work, especially if you have to support many stores with different receipt layouts.

The way I would go is to allow people to upload whatever they want, without checking for dupes. Once a winning person has been chosen, somebody goes manually through all the pictures the winner has uploaded and compares them based on the numbers mentioned above. If duplicates are found, the "winner" is disqualified and another one is selected, until you find somebody who did not upload duplicates.

The problems with this system: 1) different people could reuse the same receipt. You can reduce the probability by checking the picture files for being the same, or maybe use some picture recognition algorithms to compare them for one picture being a crop of the other. You cannot stop it from happening completely with the solution above, because they can take many pictures of the same receipt. But I think this is a risk most organisers will be willing to take, especially if participants don't know how well you can recognize duplicates.

And 2), there is a risk that somebody will forget they already entered their receipt and enter it a second time by honest mistake, disqualifying themselves. As you are already gathering personal information anyway (I assume you are), you could also give them the opportunity to have something like an account (openID login will be probably easiest for both sides, don't make them remember a password for this occasion) where they can control what they have entered already.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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