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-S
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 identity character has a value (its position in the alphabet, from 0) and a weight. The weights are the powers of 2 from 2 to 128, taken mod 27: 2, 4, 8, 16, 5, 10, 20. The check character has weight 1. The check character is chosen so the weighted sum plus the check value divides exactly by 27.
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 10 lines
JavaScript
Python
What the check catches
It catches every single-character error and every swap of two neighbouring characters, including a swap with the check character. These are the most common typing and reading mistakes.
It can miss some swaps of characters further apart (about 5% of all swaps) and some repeated-pair errors such as AA typed as BB (about 8%). Modulus 27 shares a factor with 3, so no choice of weights closes this completely. A prime modulus would be stronger and needs a different alphabet size.
The records, history and API on this page are samples. Nothing here is a live registry.