{"abstract":"Codes are validated against a sum that already contains the digit being checked.","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":"Dropping the first digit instead of the last removes the indicator/prefix digit.","family":"w2-check_digit_algorithms-gtin-family-body-slice","id":"FA-72466","implementations":{"attempt":{"sha256":"2cc80996fb50443e7a5f6561071c48c3b2ec3912cb435ef7b64c0f0dd8dbe0b2","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, 14):\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 [\"934235100467\"]', ['934235100467'], ['GTIN-12', True]], ['control [\"07251952\"]', ['07251952'], ['GTIN-8', False]], ['control [\"934235100464\"]', ['934235100464'], ['GTIN-12', False]], ['control [\"0916391037044\"]', ['0916391037044'], ['GTIN-13', False]], ['control [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['control [\"033345301898\"]', ['033345301898'], ['GTIN-12', False]], ['control [\"12641168\"]', ['12641168'], ['GTIN-8', False]]], [['regression [\"59804222888448\"]', ['59804222888448'], ['GTIN-14', True]], ['regression [\"8847703723452\"]', ['8847703723452'], ['GTIN-13', True]], ['control [\"12641168\"]', ['12641168'], ['GTIN-8', False]], ['control [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['control [\"6916522076168\"]', ['6916522076168'], ['GTIN-13', False]], ['control [\"036000291452\"]', ['036000291452'], ['GTIN-12', True]], ['control [\"4006381333932\"]', ['4006381333932'], ['GTIN-13', False]], ['control [\"0\"]', ['0'], 'malformed']], [['regression [\"033345301891\"]', ['033345301891'], ['GTIN-12', True]], ['regression [\"12641161\"]', ['12641161'], ['GTIN-8', True]], ['partial-repair [\"84650644669471\"]', ['84650644669471'], ['GTIN-14', True]], ['control [\"0\"]', ['0'], 'malformed'], ['control [\"123456789012345\"]', ['123456789012345'], 'malformed'], ['control [\"400638133393\"]', ['400638133393'], ['GTIN-12', False]], ['control [\"40063813339a1\"]', ['40063813339a1'], 'malformed'], ['control [\"00000000\"]', ['00000000'], ['GTIN-8', True]]], [['regression [\"6916522076161\"]', ['6916522076161'], ['GTIN-13', True]], ['regression [\"4006381333931\"]', ['4006381333931'], ['GTIN-13', True]], ['partial-repair [\"96385074\"]', ['96385074'], ['GTIN-8', True]], ['control [\"07251952\"]', ['07251952'], ['GTIN-8', False]], ['control [\"934235100464\"]', ['934235100464'], ['GTIN-12', False]], ['control [\"0916391037044\"]', ['0916391037044'], ['GTIN-13', False]], ['control [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['control [\"033345301898\"]', ['033345301898'], ['GTIN-12', False]]], [['regression [\"10614141000415\"]', ['10614141000415'], ['GTIN-14', True]], ['regression [\"9780306406157\"]', ['9780306406157'], ['GTIN-13', True]], ['partial-repair [\"5901234123457\"]', ['5901234123457'], ['GTIN-13', True]], ['control [\"12641168\"]', ['12641168'], ['GTIN-8', False]], ['control [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['control [\"6916522076168\"]', ['6916522076168'], ['GTIN-13', False]], ['control [\"036000291452\"]', ['036000291452'], ['GTIN-12', True]], ['control [\"4006381333932\"]', ['4006381333932'], ['GTIN-13', False]]]]\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":"191a51ae895ed37ffb40525c92772e7a9ee55d82e942f35ffdc43d0909432f2f","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, 14):\n        return 'malformed'\n    body = s\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 [\"934235100467\"]', ['934235100467'], ['GTIN-12', True]], ['control [\"07251952\"]', ['07251952'], ['GTIN-8', False]], ['control [\"934235100464\"]', ['934235100464'], ['GTIN-12', False]], ['control [\"0916391037044\"]', ['0916391037044'], ['GTIN-13', False]], ['control [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['control [\"033345301898\"]', ['033345301898'], ['GTIN-12', False]], ['control [\"12641168\"]', ['12641168'], ['GTIN-8', False]]], [['regression [\"59804222888448\"]', ['59804222888448'], ['GTIN-14', True]], ['regression [\"8847703723452\"]', ['8847703723452'], ['GTIN-13', True]], ['control [\"12641168\"]', ['12641168'], ['GTIN-8', False]], ['control [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['control [\"6916522076168\"]', ['6916522076168'], ['GTIN-13', False]], ['control [\"036000291452\"]', ['036000291452'], ['GTIN-12', True]], ['control [\"4006381333932\"]', ['4006381333932'], ['GTIN-13', False]], ['control [\"0\"]', ['0'], 'malformed']], [['regression [\"033345301891\"]', ['033345301891'], ['GTIN-12', True]], ['regression [\"12641161\"]', ['12641161'], ['GTIN-8', True]], ['partial-repair [\"84650644669471\"]', ['84650644669471'], ['GTIN-14', True]], ['control [\"0\"]', ['0'], 'malformed'], ['control [\"123456789012345\"]', ['123456789012345'], 'malformed'], ['control [\"400638133393\"]', ['400638133393'], ['GTIN-12', False]], ['control [\"40063813339a1\"]', ['40063813339a1'], 'malformed'], ['control [\"00000000\"]', ['00000000'], ['GTIN-8', True]]], [['regression [\"6916522076161\"]', ['6916522076161'], ['GTIN-13', True]], ['regression [\"4006381333931\"]', ['4006381333931'], ['GTIN-13', True]], ['partial-repair [\"96385074\"]', ['96385074'], ['GTIN-8', True]], ['control [\"07251952\"]', ['07251952'], ['GTIN-8', False]], ['control [\"934235100464\"]', ['934235100464'], ['GTIN-12', False]], ['control [\"0916391037044\"]', ['0916391037044'], ['GTIN-13', False]], ['control [\"59804222888445\"]', ['59804222888445'], ['GTIN-14', False]], ['control [\"033345301898\"]', ['033345301898'], ['GTIN-12', False]]], [['regression [\"10614141000415\"]', ['10614141000415'], ['GTIN-14', True]], ['regression [\"9780306406157\"]', ['9780306406157'], ['GTIN-13', True]], ['partial-repair [\"5901234123457\"]', ['5901234123457'], ['GTIN-13', True]], ['control [\"12641168\"]', ['12641168'], ['GTIN-8', False]], ['control [\"84650644669478\"]', ['84650644669478'], ['GTIN-14', False]], ['control [\"6916522076168\"]', ['6916522076168'], ['GTIN-13', False]], ['control [\"036000291452\"]', ['036000291452'], ['GTIN-12', True]], ['control [\"4006381333932\"]', ['4006381333932'], ['GTIN-13', False]]]]\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-body-slice","generated_at":"2026-09-29T14:48:38.728493+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":"body is the entire string rather than all digits except the last.","sha256":"3a06d6ec66bfefefda7fd02ec3a36b884cb9b1e03f9a57b6ed617df39c1a7b1f","title":"GTIN sum includes the check digit · 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.602,"exit_code":1,"observations":[{"actual":["GTIN-8",false],"check":"regression [\"07251955\"]","expected":["GTIN-8",true],"passed":false},{"actual":["GTIN-12",false],"check":"regression [\"934235100467\"]","expected":["GTIN-12",true],"passed":false},{"actual":["GTIN-8",false],"check":"control [\"07251952\"]","expected":["GTIN-8",false],"passed":true},{"actual":["GTIN-12",false],"check":"control [\"934235100464\"]","expected":["GTIN-12",false],"passed":true},{"actual":["GTIN-13",false],"check":"control [\"0916391037044\"]","expected":["GTIN-13",false],"passed":true},{"actual":["GTIN-14",false],"check":"control [\"59804222888445\"]","expected":["GTIN-14",false],"passed":true},{"actual":["GTIN-12",false],"check":"control [\"033345301898\"]","expected":["GTIN-12",false],"passed":true},{"actual":["GTIN-8",false],"check":"control [\"12641168\"]","expected":["GTIN-8",false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"07251955\\\"]\", \"actual\": [\"GTIN-8\", false], \"expected\": [\"GTIN-8\", true], \"passed\": false}, {\"check\": \"regression [\\\"934235100467\\\"]\", \"actual\": [\"GTIN-12\", false], \"expected\": [\"GTIN-12\", true], \"passed\": false}, {\"check\": \"control [\\\"07251952\\\"]\", \"actual\": [\"GTIN-8\", false], \"expected\": [\"GTIN-8\", false], \"passed\": true}, {\"check\": \"control [\\\"934235100464\\\"]\", \"actual\": [\"GTIN-12\", false], \"expected\": [\"GTIN-12\", false], \"passed\": true}, {\"check\": \"control [\\\"0916391037044\\\"]\", \"actual\": [\"GTIN-13\", false], \"expected\": [\"GTIN-13\", false], \"passed\": true}, {\"check\": \"control [\\\"59804222888445\\\"]\", \"actual\": [\"GTIN-14\", false], \"expected\": [\"GTIN-14\", false], \"passed\": true}, {\"check\": \"control [\\\"033345301898\\\"]\", \"actual\": [\"GTIN-12\", false], \"expected\": [\"GTIN-12\", false], \"passed\": true}, {\"check\": \"control [\\\"12641168\\\"]\", \"actual\": [\"GTIN-8\", false], \"expected\": [\"GTIN-8\", false], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.901,"exit_code":1,"observations":[{"actual":["GTIN-8",false],"check":"regression [\"07251955\"]","expected":["GTIN-8",true],"passed":false},{"actual":["GTIN-12",false],"check":"regression [\"934235100467\"]","expected":["GTIN-12",true],"passed":false},{"actual":["GTIN-8",false],"check":"control [\"07251952\"]","expected":["GTIN-8",false],"passed":true},{"actual":["GTIN-12",false],"check":"control [\"934235100464\"]","expected":["GTIN-12",false],"passed":true},{"actual":["GTIN-13",false],"check":"control [\"0916391037044\"]","expected":["GTIN-13",false],"passed":true},{"actual":["GTIN-14",false],"check":"control [\"59804222888445\"]","expected":["GTIN-14",false],"passed":true},{"actual":["GTIN-12",false],"check":"control [\"033345301898\"]","expected":["GTIN-12",false],"passed":true},{"actual":["GTIN-8",false],"check":"control [\"12641168\"]","expected":["GTIN-8",false],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"07251955\\\"]\", \"actual\": [\"GTIN-8\", false], \"expected\": [\"GTIN-8\", true], \"passed\": false}, {\"check\": \"regression [\\\"934235100467\\\"]\", \"actual\": [\"GTIN-12\", false], \"expected\": [\"GTIN-12\", true], \"passed\": false}, {\"check\": \"control [\\\"07251952\\\"]\", \"actual\": [\"GTIN-8\", false], \"expected\": [\"GTIN-8\", false], \"passed\": true}, {\"check\": \"control [\\\"934235100464\\\"]\", \"actual\": [\"GTIN-12\", false], \"expected\": [\"GTIN-12\", false], \"passed\": true}, {\"check\": \"control [\\\"0916391037044\\\"]\", \"actual\": [\"GTIN-13\", false], \"expected\": [\"GTIN-13\", false], \"passed\": true}, {\"check\": \"control [\\\"59804222888445\\\"]\", \"actual\": [\"GTIN-14\", false], \"expected\": [\"GTIN-14\", false], \"passed\": true}, {\"check\": \"control [\\\"033345301898\\\"]\", \"actual\": [\"GTIN-12\", false], \"expected\": [\"GTIN-12\", false], \"passed\": true}, {\"check\": \"control [\\\"12641168\\\"]\", \"actual\": [\"GTIN-8\", false], \"expected\": [\"GTIN-8\", 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."}}