ONE PRODUCT · ONE IDENTITY DATASHEET · DEMO · DRAFT 0.1ENQUIRE →
Concept

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.

  1. Scan the code. The 2D code holds a web address.
  2. The datasheet opens. It shows the item, its identifier and its status.
  3. The check runs. The page recomputes the check character. VERIFIED appears only if it matches.
No meaning insideLetters and digits are issued in sequence or at random, never derived from the description.
PersistentThe same code stays with the item through renames, mergers and system migrations.
Self-checkingA check character catches every single-character error and every swap of neighbouring characters.
OpenThe format, the validator and the API are meant to be published so anyone can verify a code.
Format

Anatomy of Q-AC4F82M-S

Q
Prefix. Marks a Q-UPID.
AC4F82M
Identity. 7 characters from a 27-symbol alphabet.
S
Check character, Modulus 27.

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.

Working check

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.

Open API

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).

Provenance

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.

Reference implementation

The validator in 10 lines

JavaScript
Python
Error checking

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.