Methodology: invalid example barcodes in public documentation

How we built the study invalid example barcodes in public documentation (2026): the sample, the counting rule, the classifications, the thresholds and the limits.

Data as of · Barcodes.GG (Reactive Systems SL)

Sample and dates

Between 20 October 2026 and 27 October 2026, our outreach review searched for public pages that show an example barcode: help centres, API references, import templates, feed specifications, tutorials and glossaries, in many languages. For each page, a reviewer fetched the page, copied the example code, recalculated the check digit and wrote notes. The study reads those notes. It does not crawl the pages again, so each figure is as of 27 October 2026.

The script read 6736 review records. Records without a page or a domain, and pages on barcodes.gg, do not count.

The counting rule

A record counts when its reviewer notes contain a code of 8, 12, 13 or 14 digits that fails the GS1 modulo-10 check digit, and the notes also name the correction in one of these forms:

  • the corrected code itself, for example "5901234567890 … 5901234567893";
  • the code or its data digits, then within 30 characters an arrow, "check", "should be", "valid" or "correct", then the correct check digit, for example "1234567890123 (->8)";
  • an ellipsis and the last three digits of the corrected code, for example "only …893 is valid".

The script recalculates every check digit. Our own message to the site does not count. A site counts once, when at least one of its records passes the rule, and its codes are the union of the passing codes of its records.

Exclusions

  • Pages on barcodes.gg.
  • Records whose notes name an invalid code but no correction.
  • Codes written with spaces, and SSCC codes of 18 digits.
  • Codes that pass the check digit.

Thresholds and the Other rows

No table row may point at one site. A row with fewer than 3 sites joins an "Other" row, and the "Other" row shows the sum of the rows it replaces. This applies to languages, prefixes, GS1 allocations and answers. In the prefix table, a language appears in the last column only when 3 or more sites of the row share it; otherwise the cell says "mixed". Percentages are whole numbers of the sites in their own row, so a column of shares can add up to 99 or 101.

Classifications

Language: the language field of the record. A site takes the language of most of its records.

Prefix: the first three digits of the 13-digit form (a GTIN-14 loses its indicator digit). Only 13- and 14-digit codes count. The GS1 allocation comes from the public GS1 prefix list. A prefix row is a typed sequence when most of its codes count up from the first digit, such as 1234… or 2345…; nobody chose those prefixes for a country.

Document type: first, the URL path is tested in this order: API reference (api, developer, reference, swagger, openapi), tutorial or blog (blog, tutorial, article, news, glossary), feed spec or import template (feed, import, template, csv, xml, spec, merchant, marketplace, catalog), ERP or POS help centre (help, support, kb, knowledge, docs, manual, wiki, faq, guide and local words for help). When the path matches nothing, the same four types are tested on the notes. A site takes the type of most of its records. Other means no rule matched.

Typed sequence: the code contains 1234567, 0123456 or 9876543.

Counted check digit: the last four digits count up by one, with 9 followed by 0, as in …7890 or …0123.

Answers: each notified site takes its strongest answer within the window. A fix that we saw on the page comes first, then a reply that says the page is corrected, then agreement or a hand-over to the owning team, then a request for a link or another reply, then a refusal, then an automatic reply only, then no reply. We read the replies in our inbox and matched them to a site by the sender domain or the address we wrote to.

Limits

  • The sample comes from targeted searches, not from a random crawl. It cannot tell what share of all documentation has a wrong example.
  • The searches covered some languages, markets and document types more than others. The counts show where we looked as much as where errors are; compare shares, not counts.
  • The figures come from reviewer notes, and the pages were not fetched again for the tables.
  • The document type rule uses keywords, so some sites can sit in a neighbouring type.
  • A check digit error is one kind of error. The study does not check whether a valid code is assigned to a product.

Corrections

27 October 2026, second version of the files. The GS1 range 100 to 139 now maps to the United States, as in the GS1 prefix list; it mapped to the United States and Canada before. Prefix 123 now counts under "United States" in by_prefix.csv and by_gs1_allocation.csv. Prefixes that belong to no listed range now read "Other or unassigned prefixes" instead of "Other GS1 member organisations". New columns: the main language per prefix, the typed-sequence flag per prefix and four shares per document type. New file: outcomes.csv. No site count changed.

Update cadence

We plan to update the study each quarter with new pages and the fix count. Each edition keeps its own date. Earlier CSV files stay available.

How to cite

Barcodes.GG (Reactive Systems SL). Invalid example barcodes in public documentation (2026). Data as of 27 October 2026. https://barcodes.gg/research/invalid-barcode-examples-2026

Free for editorial use with a link to Barcodes.GG. Please link this page, not a tool page, so readers can find the method and the files.

The script that builds the CSV files (scripts/research/invalid_examples.py) and the chart script are in the Barcodes.GG repository. Questions or corrections: mail@barcodes.gg.