io.github.qinisolabs/veridigit
Verified IBAN, card, ISBN-13 & VIN validation for AI agents — checksums, not guesses.
Open source Open in the app JSON README (API)
About
Verified IBAN, card, ISBN-13 & VIN validation for AI agents — checksums, not guesses.
Details
- Kind
- MCP servers
- Topic
- No topic detected
- Publisher
- qinisolabs
- Origin
- official
- Category
- ferramentas
- Transport
- local
- Version
- 0.1.0
- Last push
- 2026-06-15T21:13:54Z
- Repository state
- ativo
- Language
- TypeScript
- License
- Apache-2.0
- Added
- 2026-08-29 04:01:15
- Updated
- 2026-08-29 04:01:15
- Origin id
io.github.qinisolabs/veridigit
README
# veridigit
**Verified validation of structured identifiers for AI agents — checksums, not guesses.**
LLMs cheerfully accept malformed IBANs, mistype card check digits, invent ISBN and VIN
check digits, and guess a card's brand wrong. `veridigit` gives an agent a deterministic,
authoritative answer instead: it runs the real checksum algorithms and returns structured
results with the parsed parts and clear error reasons.
It ships as **both** an MCP server (for agents to call live) and a typed TypeScript
library (for apps to import).
Supported in v1:
- **IBAN** — ISO 7064 mod-97 checksum + country-specific length, for 75+ countries.
- **Payment cards** — Luhn (ISO/IEC 7812) checksum, brand detection from the BIN
(Visa, Mastercard, Amex, Discover, Diners, JCB, UnionPay), and length rules.
- **ISBN-13** — 978/979 prefix and mod-10 weighted check digit.
- **VIN** — ISO 3779 alphabet (no I/O/Q) and the position-9 transliteration check digit.
## Why
On 32 randomly generated, non-memorised identifiers, a frontier model with no tool got the
check digit **wrong 91% of the time** — IBAN 100%, VIN 100%, ISBN-13 88%, card/Luhn 75% —
versus **0%** for `veridigit`. The failure is invisible: the model returns a confident,
well-formatted answer that happens to be wrong. `veridigit` replaces the guess with the
algorithm.
Benchmark and reproducible harness: **https://qinisolabs.github.io/veridigit**
> The 91% figure is one frontier model, tool-free, at temperature 0. Run it on any model
> yourself with the harness in [`bench/`](bench/).
## Use as an MCP server
```jsonc
// in your MCP client config
{
"mcpServers": {
"veridigit": { "command": "npx", "args": ["-y", "veridigit"] }
}
}
```
Tools exposed: `validate_iban`, `validate_card`, `validate_isbn`, `validate_vin`.
## Use as a library
```bash
npm install veridigit
```
```ts
import { validateIban, validateCard, validateIsbn13, validateVin } from "veridigit";
validateIban("GB82 WEST 1234 5698 7654 32");
// { valid: true, countryCode: "GB", country: "United Kingdom", checkDigits: "82", ... }
validateCard("4111 1111 1111 1111");
// { valid: true, luhnValid: true, brand: "Visa", lengthValid: true, ... }
validateIsbn13("978-0-306-40615-7"); // { valid: true, type: "ISBN-13", checkDigit: "7", ... }
validateVin("1HGCM82633A004352"); // { valid: true, checkDigit: "3", ... }
```
Helper exports are also available: `ibanCheckDigits`, `luhnValid`, `luhnCheckDigit`,
`detectBrand`, `isbn13CheckDigit`, `vinCheckDigit`, `supportedIbanCountries`.
## Scope
`veridigit` validates the **structure** of an identifier — its format and checksum. It
does **not** confirm that a bank account, card, book or vehicle actually exists, is active,
or belongs to anyone. It performs no network calls.
## Development
```bash
npm install
npm run build # tsc -> dist/
npm test # parity/known-answer tests via tsx
```
The curated reference data (IBAN country specs, card BIN ranges) lives in `data/`.
## License
Apache-2.0