{"abstract":"Short-format and case-level codes are reported malformed.","category":"Check-digit algorithms","checks":8,"contract":"Validate a GTIN-8, GTIN-12, GTIN-13 or GTIN-14 given as ASCII digits (any other length or character: \"malformed\"). Weights 3,1 alternate starting with 3 on the digit immediately left of the check digit, so the alignment is from the right for every length. Return [kind, check digit matches].","contract_signature":"s","evaluation_group":"w2-check_digit_algorithms-gtin-family","failed_approach":"Adding GTIN-8 but not GTIN-14 still rejects outer-case codes.","family":"w2-check_digit_algorithms-gtin-family-supported-lengths","id":"FA-72456","implementations":{"attempt":{"sha256":"8209da9ee9bac7a4811d75fb0adf7e0f20b79d0d719bdab2f971b6b9ccd39c5a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    if not s.isascii() or not s.isdigit() or len(s) not in (8, 12, 13):\n        return 'malformed'\n    body = s[:-1]\n    total = 0\n    for i, ch in enumerate(reversed(body)):\n        total += int(ch) * (3 if i % 2 == 0 else 1)\n    check = (10 - total % 10) % 10\n    kind = {8: 'GTIN-8', 12: 'GTIN-12', 13: 'GTIN-13', 14: 'GTIN-14'}[len(s)]\n    return [kind, check == int(s[-1])]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"07251955\"]', ['07251955'], ['GTIN-8', True]], ['regression [\"07251952\"]', ['07251952'], ['GTIN-8', False]], ['partial-repair [\"59804222888448\"]', ['59804222888448'], ['GTIN-14', True]], ['partial-repair [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['control [\"934235100467\"]', ['934235100467'], ['GTIN-12', True]], ['control [\"934235100464\"]', ['934235100464'], ['GTIN-12', False]], ['control [\"0916391037047\"]', ['0916391037047'], ['GTIN-13', True]], ['control [\"0916391037044\"]', ['0916391037044'], ['GTIN-13', False]]], [['regression [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['regression [\"12641161\"]', ['12641161'], ['GTIN-8', True]], ['partial-repair [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['partial-repair [\"10614141000415\"]', ['10614141000415'], ['GTIN-14', True]], ['control [\"8847703723459\"]', ['8847703723459'], ['GTIN-13', False]], ['control [\"033345301891\"]', ['033345301891'], ['GTIN-12', True]], ['control [\"033345301898\"]', ['033345301898'], ['GTIN-12', False]], ['control [\"6916522076161\"]', ['6916522076161'], ['GTIN-13', True]]], [['regression [\"84650644669471\"]', ['84650644669471'], ['GTIN-14', True]], ['regression [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['partial-repair [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['control [\"4006381333931\"]', ['4006381333931'], ['GTIN-13', True]], ['control [\"036000291452\"]', ['036000291452'], ['GTIN-12', True]], ['control [\"4006381333932\"]', ['4006381333932'], ['GTIN-13', False]], ['control [\"0\"]', ['0'], 'malformed'], ['control [\"123456789012345\"]', ['123456789012345'], 'malformed']], [['regression [\"10614141000415\"]', ['10614141000415'], ['GTIN-14', True]], ['regression [\"00000000\"]', ['00000000'], ['GTIN-8', True]], ['partial-repair [\"59804222888448\"]', ['59804222888448'], ['GTIN-14', True]], ['control [\"400638133393\"]', ['400638133393'], ['GTIN-12', False]], ['control [\"40063813339a1\"]', ['40063813339a1'], 'malformed'], ['control [\"9780306406157\"]', ['9780306406157'], ['GTIN-13', True]], ['control [\"5901234123457\"]', ['5901234123457'], ['GTIN-13', True]], ['control [\"934235100467\"]', ['934235100467'], ['GTIN-12', True]]], [['regression [\"07251952\"]', ['07251952'], ['GTIN-8', False]], ['regression [\"59804222888448\"]', ['59804222888448'], ['GTIN-14', True]], ['partial-repair [\"84650644669471\"]', ['84650644669471'], ['GTIN-14', True]], ['partial-repair [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['control [\"934235100464\"]', ['934235100464'], ['GTIN-12', False]], ['control [\"0916391037047\"]', ['0916391037047'], ['GTIN-13', True]], ['control [\"0916391037044\"]', ['0916391037044'], ['GTIN-13', False]], ['control [\"8847703723452\"]', ['8847703723452'], ['GTIN-13', True]]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"9da4b8c485d3c59f7e969071321e60e49f467d4609d278a7cd6efc95bbaf7d84","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    if not s.isascii() or not s.isdigit() or len(s) not in (12, 13):\n        return 'malformed'\n    body = s[:-1]\n    total = 0\n    for i, ch in enumerate(reversed(body)):\n        total += int(ch) * (3 if i % 2 == 0 else 1)\n    check = (10 - total % 10) % 10\n    kind = {8: 'GTIN-8', 12: 'GTIN-12', 13: 'GTIN-13', 14: 'GTIN-14'}[len(s)]\n    return [kind, check == int(s[-1])]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"07251955\"]', ['07251955'], ['GTIN-8', True]], ['regression [\"07251952\"]', ['07251952'], ['GTIN-8', False]], ['partial-repair [\"59804222888448\"]', ['59804222888448'], ['GTIN-14', True]], ['partial-repair [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['control [\"934235100467\"]', ['934235100467'], ['GTIN-12', True]], ['control [\"934235100464\"]', ['934235100464'], ['GTIN-12', False]], ['control [\"0916391037047\"]', ['0916391037047'], ['GTIN-13', True]], ['control [\"0916391037044\"]', ['0916391037044'], ['GTIN-13', False]]], [['regression [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['regression [\"12641161\"]', ['12641161'], ['GTIN-8', True]], ['partial-repair [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['partial-repair [\"10614141000415\"]', ['10614141000415'], ['GTIN-14', True]], ['control [\"8847703723459\"]', ['8847703723459'], ['GTIN-13', False]], ['control [\"033345301891\"]', ['033345301891'], ['GTIN-12', True]], ['control [\"033345301898\"]', ['033345301898'], ['GTIN-12', False]], ['control [\"6916522076161\"]', ['6916522076161'], ['GTIN-13', True]]], [['regression [\"84650644669471\"]', ['84650644669471'], ['GTIN-14', True]], ['regression [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['partial-repair [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['control [\"4006381333931\"]', ['4006381333931'], ['GTIN-13', True]], ['control [\"036000291452\"]', ['036000291452'], ['GTIN-12', True]], ['control [\"4006381333932\"]', ['4006381333932'], ['GTIN-13', False]], ['control [\"0\"]', ['0'], 'malformed'], ['control [\"123456789012345\"]', ['123456789012345'], 'malformed']], [['regression [\"10614141000415\"]', ['10614141000415'], ['GTIN-14', True]], ['regression [\"00000000\"]', ['00000000'], ['GTIN-8', True]], ['partial-repair [\"59804222888448\"]', ['59804222888448'], ['GTIN-14', True]], ['control [\"400638133393\"]', ['400638133393'], ['GTIN-12', False]], ['control [\"40063813339a1\"]', ['40063813339a1'], 'malformed'], ['control [\"9780306406157\"]', ['9780306406157'], ['GTIN-13', True]], ['control [\"5901234123457\"]', ['5901234123457'], ['GTIN-13', True]], ['control [\"934235100467\"]', ['934235100467'], ['GTIN-12', True]]], [['regression [\"07251952\"]', ['07251952'], ['GTIN-8', False]], ['regression [\"59804222888448\"]', ['59804222888448'], ['GTIN-14', True]], ['partial-repair [\"84650644669471\"]', ['84650644669471'], ['GTIN-14', True]], ['partial-repair [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['control [\"934235100464\"]', ['934235100464'], ['GTIN-12', False]], ['control [\"0916391037047\"]', ['0916391037047'], ['GTIN-13', True]], ['control [\"0916391037044\"]', ['0916391037044'], ['GTIN-13', False]], ['control [\"8847703723452\"]', ['8847703723452'], ['GTIN-13', True]]]]\nfor label, args, expected in fixtures[N - 1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic, bounded teaching model of the named scheme under the stated contract; not a certified validator. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-check_digit_algorithms-gtin-family-supported-lengths","generated_at":"2026-09-29T14:48:38.640236+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Retail and logistics scanners accept several GTIN lengths through one validator.","root_cause":"The length gate only allows 12 and 13 digits.","sha256":"430e1c7b1b196acb21d33d089678bb5e7b4e3c15adcae6c507e2513ec94d2ed5","title":"GTIN validator rejects GTIN-8 and GTIN-14 · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":39.777,"exit_code":1,"observations":[{"actual":["GTIN-8",true],"check":"regression [\"07251955\"]","expected":["GTIN-8",true],"passed":true},{"actual":["GTIN-8",false],"check":"regression [\"07251952\"]","expected":["GTIN-8",false],"passed":true},{"actual":"malformed","check":"partial-repair [\"59804222888448\"]","expected":["GTIN-14",true],"passed":false},{"actual":"malformed","check":"partial-repair [\"59804222888445\"]","expected":["GTIN-14",false],"passed":false},{"actual":["GTIN-12",true],"check":"control [\"934235100467\"]","expected":["GTIN-12",true],"passed":true},{"actual":["GTIN-12",false],"check":"control [\"934235100464\"]","expected":["GTIN-12",false],"passed":true},{"actual":["GTIN-13",true],"check":"control [\"0916391037047\"]","expected":["GTIN-13",true],"passed":true},{"actual":["GTIN-13",false],"check":"control [\"0916391037044\"]","expected":["GTIN-13",false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"07251955\\\"]\", \"actual\": [\"GTIN-8\", true], \"expected\": [\"GTIN-8\", true], \"passed\": true}, {\"check\": \"regression [\\\"07251952\\\"]\", \"actual\": [\"GTIN-8\", false], \"expected\": [\"GTIN-8\", false], \"passed\": true}, {\"check\": \"partial-repair [\\\"59804222888448\\\"]\", \"actual\": \"malformed\", \"expected\": [\"GTIN-14\", true], \"passed\": false}, {\"check\": \"partial-repair [\\\"59804222888445\\\"]\", \"actual\": \"malformed\", \"expected\": [\"GTIN-14\", false], \"passed\": false}, {\"check\": \"control [\\\"934235100467\\\"]\", \"actual\": [\"GTIN-12\", true], \"expected\": [\"GTIN-12\", true], \"passed\": true}, {\"check\": \"control [\\\"934235100464\\\"]\", \"actual\": [\"GTIN-12\", false], \"expected\": [\"GTIN-12\", false], \"passed\": true}, {\"check\": \"control [\\\"0916391037047\\\"]\", \"actual\": [\"GTIN-13\", true], \"expected\": [\"GTIN-13\", true], \"passed\": true}, {\"check\": \"control [\\\"0916391037044\\\"]\", \"actual\": [\"GTIN-13\", false], \"expected\": [\"GTIN-13\", false], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.342,"exit_code":1,"observations":[{"actual":"malformed","check":"regression [\"07251955\"]","expected":["GTIN-8",true],"passed":false},{"actual":"malformed","check":"regression [\"07251952\"]","expected":["GTIN-8",false],"passed":false},{"actual":"malformed","check":"partial-repair [\"59804222888448\"]","expected":["GTIN-14",true],"passed":false},{"actual":"malformed","check":"partial-repair [\"59804222888445\"]","expected":["GTIN-14",false],"passed":false},{"actual":["GTIN-12",true],"check":"control [\"934235100467\"]","expected":["GTIN-12",true],"passed":true},{"actual":["GTIN-12",false],"check":"control [\"934235100464\"]","expected":["GTIN-12",false],"passed":true},{"actual":["GTIN-13",true],"check":"control [\"0916391037047\"]","expected":["GTIN-13",true],"passed":true},{"actual":["GTIN-13",false],"check":"control [\"0916391037044\"]","expected":["GTIN-13",false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"07251955\\\"]\", \"actual\": \"malformed\", \"expected\": [\"GTIN-8\", true], \"passed\": false}, {\"check\": \"regression [\\\"07251952\\\"]\", \"actual\": \"malformed\", \"expected\": [\"GTIN-8\", false], \"passed\": false}, {\"check\": \"partial-repair [\\\"59804222888448\\\"]\", \"actual\": \"malformed\", \"expected\": [\"GTIN-14\", true], \"passed\": false}, {\"check\": \"partial-repair [\\\"59804222888445\\\"]\", \"actual\": \"malformed\", \"expected\": [\"GTIN-14\", false], \"passed\": false}, {\"check\": \"control [\\\"934235100467\\\"]\", \"actual\": [\"GTIN-12\", true], \"expected\": [\"GTIN-12\", true], \"passed\": true}, {\"check\": \"control [\\\"934235100464\\\"]\", \"actual\": [\"GTIN-12\", false], \"expected\": [\"GTIN-12\", false], \"passed\": true}, {\"check\": \"control [\\\"0916391037047\\\"]\", \"actual\": [\"GTIN-13\", true], \"expected\": [\"GTIN-13\", true], \"passed\": true}, {\"check\": \"control [\\\"0916391037044\\\"]\", \"actual\": [\"GTIN-13\", false], \"expected\": [\"GTIN-13\", false], \"passed\": true}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}