A short code that identifies one item, for good
Q-UPID stands for Qualified Unique Part Identifier. Every part gets one code. The code carries no meaning of its own, so it never has to change when a supplier, description or ERP system changes. It checks itself, so a mistyped code is caught before it reaches a database.
The code is printed as text and as a 2D code. Scanning it opens this page. The page asks an open API for the record and confirms the code is genuine.
- Scan the code. The 2D code holds a web address.
- The datasheet opens. It shows the item, its identifier and its status.
- The check runs. The page recomputes the check character. VERIFIED appears only if it matches.
Anatomy of Q-AC4F82M-3
The alphabet is . It leaves out 0, 5, B, I, O, Q, X, Y and Z, which are easily confused with other characters when read aloud or printed small.
Seven characters from 27 symbols give distinct identities.
Recompute the check character
Each character has a value (its position in the alphabet, from 0) and a weight. Values are combined as numbers in GF(27), the field with 27 elements: write a value as three base-3 digits, add two values digit by digit with no carry, and multiply by a weight with the rule in the reference code below. The seven identity weights are 17, 13, 23, 15, 5, 9 and 3, and the check character has weight 1. The check character is chosen so the weighted total is zero. Field arithmetic is used instead of ordinary arithmetic mod 27 so that no swap or repeated-pair error can cancel out.
Ask for the record yourself
These are the planned public routes. In this demonstration they run inside your browser against three sample records, so you can see the exact request and response. No server is involved.
Planned base address: https://api.q-upid.com/v1 (not live yet).
A history that shows tampering
Each event stores a fingerprint (SHA-256) of its own content plus the fingerprint of the event before it. Change any past event and every later fingerprint stops matching. The fingerprints below are computed in your browser now.
This demo chains the events but does not yet sign them. Signing with a registry key is the planned next step.
The validator in a few lines
JavaScript
Python
What the check catches
It catches every single-character error, every swap of two characters wherever they sit (including a swap with the check character) and every repeated-pair error such as AA typed as BB. These are the most common typing and reading mistakes.
One check character cannot catch everything. About 1 in 26 errors that change two unrelated characters passes the check (3.85%), and about 1 in 27 errors that change three characters passes (3.70%). These rates come from testing every such error pattern.
The records, history and API on this page are samples. Nothing here is a live registry.