Validating numbers
Format and check-digit validation for corporate numbers and registration numbers. Free, and unmetered.
The specification is published by the NTA and anyone can implement it in an afternoon. Metering something a customer could reimplement that quickly would be theatre.
Over the API
Up to 100 numbers per request. No authentication required.
curl -X POST https://api.daichodo.com/v1/validate \
-H "content-type: application/json" \
-d '{"numbers": ["T8000000000001", "8000000000001", "not-a-number"]}'
{
"results": [
{ "value": "T8000000000001", "valid": true, "reason": null,
"corporate_ number": "8000000000001" },
{ "value": "8000000000001", "valid": true, "reason": null,
"corporate_ number": "8000000000001" },
{ "value": "not-a-number", "valid": false,
"reason": "must be exactly 13 digits", "corporate_ number": null }
]
}
Separators and whitespace are stripped before the check, so values pasted straight out of an invoice or a spreadsheet are fine.
As a library
If you would rather not make a network call at all, the same logic is published as open source.
npm install @daichodo/validate
import { isValid } from '@daichodo/validate';
isValid('8000000000001'); // true
isValid('T8000000000001'); // true
pip install daichodo-validate
How the check digit works
A corporate number is 13 digits, where the leading digit is a checksum over the other twelve. It catches transposed digits and similar slips.
A registration number is T plus 13 digits, and the same check applies to
every one of them — corporations and sole traders alike. Measured over the
whole register on 2026-09-05: 5,421,496 numbers, zero exceptions.
A sole trader's 13 digits are not a corporate number and will not be found in the corporate register, but they come from the same numbering scheme, so the check digit holds. The number alone cannot tell you which kind of entity it belongs to — only a lookup can.
A failed check digit therefore means a typo or a fabrication, and is returned as
valid: false. Until 2026-09-05 this endpoint returned valid: true for those,
excusing them as sole traders; that accepted every mistyped number.
Validating is not looking up
Validation answers only "is this a well-formed number". Whether it is actually registered is a lookup.
Well-formed numbers that were never registered are trivial to generate.