(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.data-privacy-src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-PF5R8F7');

Knowledge Base

Multi-Function QR Codes

Dual Function QR Codes

What Are Dual-Function QR Codes?

A dual-function QR Code is a single, space-saving QR Code that allows:

  • consumer barcode scanning apps to open Web pages triggered by a scan; and,
  • merchants, venues, and businesses to scan the same code with CodeREADr’s enterprise app to validate and track the ID, asset, ticket, voucher, coupon, etc.

Embedded in the code is a unique, variable ID appended to a URL.  When scanned by a consumer, the URL points to a Web page – ideally one optimized for viewing on a mobile device. However, when the same code is scanned by the enterprise app, the code’s ID is captured, validated, with the timestamp, located, and stored as a formal scan record.

This technology also works with NFC Tags which offer additional security for Proof of Presence applications.

See this blog article for typical deployments.

Simple Demo

To test a dual-function code, use the QR codes in the image below. Download a free consumer barcode scanning app and scan both the URL and URL + ID codes. You’ll see that for both codes the consumer app points to a simple mobile Web page for demo purposes.

Then download the CodeREADr app, sign in with username temp and password demo and scan both the ID and URL + ID codes. You’ll see that for both codes the CodeREADr app will validate the embedded ID ‘A-123’.

The takeaway is that the dual-function code supports the functionality of both the URL and ID codes in a single code.

Dual Function QR Barcode Scanner for Business

Multi-Function QR Codes

This technology offers the same features as Dual Function QR codes but with greater functionality. The target is not to engage consumers but instead facilitate data collection and validation by an authorized CodeREADr app-user.
The QR code (or other 2D codes like Data Matrix or PDF-417) or the NFC tag would have multiple IDs (or URLs) embedded in it.

Depending on the task assigned to the app-user (each a ‘Service’), one of more of those IDs would be parsed from the string of IDs embedded in the barcode.

multi-function qr code and list

The parsed IDs would be checked against a table of valid IDs in the ‘validation database either hosted on CodeREADr’s servers (or yours) or downloaded to the app. If the ID is in the database, the app user will see a Valid response. If not, the response will be Invalid.

For example, let’s say there was a recall on a product or asset. When the app-user scans the barcode, the app would parse out the product ID and serial number (or just the serial number). Then, it will validate that against a table of recalled serial numbers. If valid, it recalls the product.

Another example would be tracking grey-market goods. The app would parse out the product ID and channel ID (or just the channel ID) to validate against a table. If Invalid, that product is not in its intended channel.

Also, you can accomplish this with multiple barcodes instead of one QR code? However, if you need more than one ID to facilitate validation, the multi-function barcode would be better. Notably, it is faster, less prone to scanning mistakes, and saves space on the product while lowering label costs.

Set Up Multi Function QR Reading

You will use the CodeREADr feature ‘Alter Scan Value’ described here.
The barcode should be embedded in the QR code with a comma separating each ID (no spaces). For the pattern, create a string using one of these patterns ^([\s\S]*?) for each unique ID, each separated with a comma. The replacement value would be $X where ‘X” is the location of the ID you want to parse. To parse more than one ID just separate each replacement value with a comma.

For a QR code with five IDs:

Pattern:

^([\s\S]*?),([\s\S]*?),([\s\S]*?),([\s\S]*?),([\s\S]*)$

Replacement: 

$1, $2, $3, $4, and/or $5