What each validator in PiiCatalog.Validators was written from. Every source was accessed on 2026-11-04, unless its line gives another date. "Official" means the issuer, its government, or a standard or register the issuer names. Where a page could not be fetched directly, the line says which copy was read.

The checks in PiiCatalog.Validators were written before python-stdnum (LGPL-2.1-or-later) was read, and were checked against these sources on 2026-11-04. PiiCatalog.Validators.NationalIds and PiiCatalog.Validators.VatEu replace a first version written after reading python-stdnum: on 2026-11-04 they were rewritten from these sources without consulting another implementation. The rewrite kept the first version's regexes in PiiCatalog.Patterns, which set each number's shape, and its test values (see "Test values"). The isikukood's check digit was added on 2026-11-11 from the sources on its line, after its author had read another implementation of it. Each line below says what the check does and what it was written from or checked against.

PiiCatalog.Validators

PiiCatalog.Validators.NationalIds

PiiCatalog.Validators.VatEu

"BMF" is the Austrian Federal Ministry of Finance, "Information über die Konstruktionsregeln der Umsatzsteuer-Identifikationsnummern (UID)", Stand November 2020, https://www.bmf.gv.at/dam/jcr:d6794f8f-d321-43df-9840-1a841f9bf5dc/BMF_UID_Konstruktionsregeln_Stand_November%202020.pdf. It holds the rules "vom jeweiligen Mitgliedstaat aufgrund bilateraler Vereinbarungen zur Veröffentlichung freigegeben", each with a worked sample, which the tests use. For ten states it says publication was not agreed. The European Commission's VIES FAQ, https://ec.europa.eu/taxation_customs/vies/#/faq, gives every state's format and says the Commission "cannot divulge these algorithms".

Test values

Most values in the vector files for vat_eu, pesel_pl, rrn_be, ppsn_ie, nif_pt, ahv_ch, svnr_at, isikukood_ee and nhs_gb were generated on 2026-10-19 by running python-stdnum: numbers of the right shape that it accepted, and near misses that it refused. Each also passes or fails the validators written from the sources above, as its file expects, so most values have been checked by two separately written validators. Each file names the issuers' own examples among them. Values that also appear in python-stdnum's documentation or tests were replaced on 2026-11-05 and 2026-11-13, apart from published examples and simple sequences such as 123456789.