Skip to content

6.1: VIN, MAC, UUID v7, pattern codes, coordinates and EORI - #16

Merged
holonsoftFounder merged 4 commits into
mainfrom
feature/6.1-more-sources
Sep 22, 2026
Merged

holonsoftFounder merged 4 commits into
mainfrom
feature/6.1-more-sources

Conversation

@holonsoftFounder

Copy link
Copy Markdown
Member

What is in here

The last batch of 6.1 data sources, in four commits:

  • VinSource / NullableVinSource: seventeen character VINs with the valid North American check digit at position nine (transliteration table and weights per standard), I/O/Q never appear, the model year position follows 49 CFR 565, optional WMI prefix. Calibrated against the standard's example (check digit X) and the all-ones number.
  • MacAddressSource / TestMacAddressSource (+ Nullable variants): unicast MAC addresses as upper case hex in three formats. The plain source draws universally administered addresses; the test variant sets the locally administered bit, the space IEEE 802 keeps free of manufacturer assignments, so those addresses provably name no vendor hardware.
  • GuidV7Source / NullableGuidV7Source: RFC 9562 version 7 UUIDs whose 48 timestamp bits come from a seeded date range instead of the clock, so a seed reproduces the same UUIDs on every run. Version and variant bits are correct; the encoded instant stays inside the range.
  • PatternSource (# digit, @ capital letter, * both, backslash escapes) with SkuSource, SerialNumberSource and LotNumberSource on top. These codes follow no public standard, so the pattern is the contract, stated openly; the lot number stamps the widespread year + day-of-year date code from a seeded date range.
  • LatitudeSource / LongitudeSource: decimal degrees with bounding box, documented as independent draws (a meaningful place needs Impose).
  • EoriSource / NullableEoriSource: EORI customs numbers (Annex 12-01 UCC IA) for BE, DE, DK, FR, GB, HR, IT, NL, PL, XI. The format has no check digit of its own, so the national part is built from the underlying national identifier with its real checks (enterprise number, CVR, doubly Luhn-valid SIRET, OIB, partita IVA, NIP + 00000, VAT registration number + 000). Austria publishes no structure and the Portuguese third country check digit is unpublished, so both stay out, with the reason in the docs. The tests document that the official format examples of HMRC and the EU Commission fail the national checksums and are rejected on purpose.

Verification

  • dotnet build -c Release: zero warnings.
  • dotnet test on net8/9/10: 4932 passed, 12 known skips (~190 new tests).
  • Every check digit source is calibrated against official worked examples or registered real identifiers before the validator judges the generator; validators run the arithmetic in the opposite direction where the scheme allows it.
  • EORI and VIN structures come from primary sources (Annex 12-01 UCC IA / EC national implementation document, 49 CFR 565), gathered and cross-checked per country; unverifiable countries are excluded rather than guessed.

Tagging v6.1.0 follows after the merge.

🤖 Generated with Claude Code

christian.vogt@hiquaro.com and others added 4 commits September 22, 2026 09:06
The VIN carries the North American check digit at position nine,
transliteration table and weights per standard, calibrated against
the classic example with the X check digit and the all ones number;
the model year position leaves out U, Z and zero. The MAC address is
a universally administered unicast by default, and
TestMacAddressSource sets the locally administered bit, the space
IEEE 802 keeps free of manufacturer assignments, so those addresses
provably name no vendor hardware. GuidV7Source builds RFC 9562
version 7 UUIDs whose 48 timestamp bits come from a seeded range
instead of the clock, so a seed reproduces the same UUIDs on every
run; version and variant bits are correct and the encoded instant
stays inside the range.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
An SKU, a serial number and a lot number follow no public standard,
so instead of pretending one exists they run on a small pattern
engine: a hash becomes a digit, an at sign a capital letter, a star
one of both, a backslash escapes, everything else stays literal.
PatternSource exposes that engine directly, SkuSource defaults to
three letters, hyphen and five digits, SerialNumberSource to four
blocks of four characters, and LotNumberSource stamps the widespread
date code of two digit year plus day of the year, drawn from a
seeded date range instead of the clock, before its suffix pattern.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Decimal degrees drawn uniformly between two bounds that have to stay
on the globe, the whole world by default, a bounding box via the
constructor. The two members of an object are drawn independently,
which the documentation says openly: the pair lies inside the box,
a meaningful place needs Impose. The README and the release notes
now cover the whole batch: VIN, MAC, UUID v7, the pattern engine
with SKU, serial and lot numbers, and the coordinates.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The EORI format of Annex 12-01 UCC IA carries no check digit of its
own, so realism comes from the national part: the Belgian enterprise
number with its mod 97 pair, the Danish CVR divisible by eleven, a
French SIRET whose SIREN and whole number both satisfy Luhn, the
Croatian OIB, the Italian partita IVA, the Polish NIP with five
zeros behind it and the UK or Northern Ireland VAT registration
number with three. Austria publishes no structure and the check
digit of the Portuguese third country scheme is unpublished, so both
stay out; a country we cannot make verifiable is not generated. The
tests build their calibration numbers from registered national
identifiers and document that the official format examples of HMRC
and the EU Commission are illustrations that fail the national
checks on purpose.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@holonsoftFounder
holonsoftFounder merged commit c580076 into main Sep 22, 2026
2 checks passed
@holonsoftFounder
holonsoftFounder deleted the feature/6.1-more-sources branch September 22, 2026 07:36

This branch was successfully deployed

1 active deployment
release — c5800763 Deployed Sep 22, 2026 by holonsoftFounder via publish #2
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant