{"abstract":"Payloads whose running sum hits a multiple of ten get the wrong check digit.","category":"Check-digit algorithms","checks":8,"contract":"ISO 7064 MOD 11,10 hybrid check digit generation for a nonempty ASCII digit payload (else None). Start with p = 10; for each digit p = ((p + d) mod 10, with 0 replaced by 10) * 2 mod 11; the check digit is (11 - p) mod 10.","evaluation_group":"w2-check_digit_algorithms-mod11-10-hybrid","failed_approach":"Substituting after reducing mod 11 instead of mod 10 misses the zero case entirely.","family":"w2-check_digit_algorithms-mod11-10-hybrid-zero-substitution","id":"FA-72566","implementations":{"attempt":{"sha256":"3d4a89d6116c98b316bbeddfe6b9bb6e58a84f0aae6ee3245c3d2fd72a67e526","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    if not s or not s.isascii() or not s.isdigit():\n        return None\n    p = 10\n    for ch in s:\n        p = ((p + int(ch)) % 11 or 10) * 2 % 11\n    return (11 - p) % 10\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"072\"]', ['072'], 5], ['regression [\"98772300\"]', ['98772300'], 4], ['partial-repair [\"9\"]', ['9'], 4], ['partial-repair [\"12\"]', ['12'], 3], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"36073\"]', ['36073'], 5]], [['regression [\"6279939841\"]', ['6279939841'], 2], ['regression [\"2638206592\"]', ['2638206592'], 8], ['partial-repair [\"36073\"]', ['36073'], 5], ['partial-repair [\"3370345686\"]', ['3370345686'], 4], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"412595035658\"]', ['412595035658'], 9]], [['regression [\"166069\"]', ['166069'], 6], ['regression [\"6943515153\"]', ['6943515153'], 0], ['partial-repair [\"412595035658\"]', ['412595035658'], 9], ['partial-repair [\"9477\"]', ['9477'], 3], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"0\"]', ['0'], 2]], [['regression [\"00000\"]', ['00000'], 0], ['regression [\"072\"]', ['072'], 5], ['partial-repair [\"6943515153\"]', ['6943515153'], 0], ['partial-repair [\"1\"]', ['1'], 9], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"3\"]', ['3'], 5]], [['regression [\"3370345686\"]', ['3370345686'], 4], ['regression [\"6279939841\"]', ['6279939841'], 2], ['partial-repair [\"95\"]', ['95'], 7], ['partial-repair [\"55555\"]', ['55555'], 1], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12\"]', ['12'], 3]]]\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":"9d1a91fc2d6ba54f608de1e24de37e7f8e8b2ecba1f65a231e858079a98ac390","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    if not s or not s.isascii() or not s.isdigit():\n        return None\n    p = 10\n    for ch in s:\n        p = ((p + int(ch)) % 10) * 2 % 11\n    return (11 - p) % 10\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"072\"]', ['072'], 5], ['regression [\"98772300\"]', ['98772300'], 4], ['partial-repair [\"9\"]', ['9'], 4], ['partial-repair [\"12\"]', ['12'], 3], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"36073\"]', ['36073'], 5]], [['regression [\"6279939841\"]', ['6279939841'], 2], ['regression [\"2638206592\"]', ['2638206592'], 8], ['partial-repair [\"36073\"]', ['36073'], 5], ['partial-repair [\"3370345686\"]', ['3370345686'], 4], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"412595035658\"]', ['412595035658'], 9]], [['regression [\"166069\"]', ['166069'], 6], ['regression [\"6943515153\"]', ['6943515153'], 0], ['partial-repair [\"412595035658\"]', ['412595035658'], 9], ['partial-repair [\"9477\"]', ['9477'], 3], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"0\"]', ['0'], 2]], [['regression [\"00000\"]', ['00000'], 0], ['regression [\"072\"]', ['072'], 5], ['partial-repair [\"6943515153\"]', ['6943515153'], 0], ['partial-repair [\"1\"]', ['1'], 9], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"3\"]', ['3'], 5]], [['regression [\"3370345686\"]', ['3370345686'], 4], ['regression [\"6279939841\"]', ['6279939841'], 2], ['partial-repair [\"95\"]', ['95'], 7], ['partial-repair [\"55555\"]', ['55555'], 1], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12\"]', ['12'], 3]]]\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"},"fixed":{"sha256":"3ba5347d6760694ede65516193000b47804d8d133a8a5822917830fb149ffde3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    if not s or not s.isascii() or not s.isdigit():\n        return None\n    p = 10\n    for ch in s:\n        p = ((p + int(ch)) % 10 or 10) * 2 % 11\n    return (11 - p) % 10\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"072\"]', ['072'], 5], ['regression [\"98772300\"]', ['98772300'], 4], ['partial-repair [\"9\"]', ['9'], 4], ['partial-repair [\"12\"]', ['12'], 3], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"36073\"]', ['36073'], 5]], [['regression [\"6279939841\"]', ['6279939841'], 2], ['regression [\"2638206592\"]', ['2638206592'], 8], ['partial-repair [\"36073\"]', ['36073'], 5], ['partial-repair [\"3370345686\"]', ['3370345686'], 4], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"412595035658\"]', ['412595035658'], 9]], [['regression [\"166069\"]', ['166069'], 6], ['regression [\"6943515153\"]', ['6943515153'], 0], ['partial-repair [\"412595035658\"]', ['412595035658'], 9], ['partial-repair [\"9477\"]', ['9477'], 3], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"0\"]', ['0'], 2]], [['regression [\"00000\"]', ['00000'], 0], ['regression [\"072\"]', ['072'], 5], ['partial-repair [\"6943515153\"]', ['6943515153'], 0], ['partial-repair [\"1\"]', ['1'], 9], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12a\"]', ['12a'], None], ['control [\"3\"]', ['3'], 5]], [['regression [\"3370345686\"]', ['3370345686'], 4], ['regression [\"6279939841\"]', ['6279939841'], 2], ['partial-repair [\"95\"]', ['95'], 7], ['partial-repair [\"55555\"]', ['55555'], 1], ['control [\"12a\"]', ['12a'], None], ['control [\"9795751\"]', ['9795751'], 6], ['control [\"\"]', [''], None], ['control [\"12\"]', ['12'], 3]]]\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-mod11-10-hybrid-zero-substitution","generated_at":"2026-09-29T14:48:39.649074+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Tax and personal identification numbers (for example OIB-style identifiers) use the hybrid MOD 11,10 system.","repair":"Replace a zero (p + d) mod 10 by 10 before doubling.","root_cause":"The substitution of 10 for a zero remainder is missing, so the product collapses to 0.","sha256":"adaa57154eab9b4e13110857e6ff963cd3af04c8ae529dd5da877e0b3c847028","title":"MOD 11,10 keeps a zero intermediate sum · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":38.251,"exit_code":1,"observations":[{"actual":9,"check":"regression [\"072\"]","expected":5,"passed":false},{"actual":4,"check":"regression [\"98772300\"]","expected":4,"passed":true},{"actual":6,"check":"partial-repair [\"9\"]","expected":4,"passed":false},{"actual":2,"check":"partial-repair [\"12\"]","expected":3,"passed":false},{"actual":6,"check":"control [\"9795751\"]","expected":6,"passed":true},{"actual":null,"check":"control [\"\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"12a\"]","expected":null,"passed":true},{"actual":4,"check":"control [\"36073\"]","expected":5,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"072\\\"]\", \"actual\": 9, \"expected\": 5, \"passed\": false}, {\"check\": \"regression [\\\"98772300\\\"]\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"partial-repair [\\\"9\\\"]\", \"actual\": 6, \"expected\": 4, \"passed\": false}, {\"check\": \"partial-repair [\\\"12\\\"]\", \"actual\": 2, \"expected\": 3, \"passed\": false}, {\"check\": \"control [\\\"9795751\\\"]\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"control [\\\"\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"12a\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"36073\\\"]\", \"actual\": 4, \"expected\": 5, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":36.729,"exit_code":1,"observations":[{"actual":1,"check":"regression [\"072\"]","expected":5,"passed":false},{"actual":0,"check":"regression [\"98772300\"]","expected":4,"passed":false},{"actual":4,"check":"partial-repair [\"9\"]","expected":4,"passed":true},{"actual":3,"check":"partial-repair [\"12\"]","expected":3,"passed":true},{"actual":6,"check":"control [\"9795751\"]","expected":6,"passed":true},{"actual":null,"check":"control [\"\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"12a\"]","expected":null,"passed":true},{"actual":5,"check":"control [\"36073\"]","expected":5,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"072\\\"]\", \"actual\": 1, \"expected\": 5, \"passed\": false}, {\"check\": \"regression [\\\"98772300\\\"]\", \"actual\": 0, \"expected\": 4, \"passed\": false}, {\"check\": \"partial-repair [\\\"9\\\"]\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"partial-repair [\\\"12\\\"]\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"control [\\\"9795751\\\"]\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"control [\\\"\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"12a\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"36073\\\"]\", \"actual\": 5, \"expected\": 5, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":37.051,"exit_code":0,"observations":[{"actual":5,"check":"regression [\"072\"]","expected":5,"passed":true},{"actual":4,"check":"regression [\"98772300\"]","expected":4,"passed":true},{"actual":4,"check":"partial-repair [\"9\"]","expected":4,"passed":true},{"actual":3,"check":"partial-repair [\"12\"]","expected":3,"passed":true},{"actual":6,"check":"control [\"9795751\"]","expected":6,"passed":true},{"actual":null,"check":"control [\"\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"12a\"]","expected":null,"passed":true},{"actual":5,"check":"control [\"36073\"]","expected":5,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"072\\\"]\", \"actual\": 5, \"expected\": 5, \"passed\": true}, {\"check\": \"regression [\\\"98772300\\\"]\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"partial-repair [\\\"9\\\"]\", \"actual\": 4, \"expected\": 4, \"passed\": true}, {\"check\": \"partial-repair [\\\"12\\\"]\", \"actual\": 3, \"expected\": 3, \"passed\": true}, {\"check\": \"control [\\\"9795751\\\"]\", \"actual\": 6, \"expected\": 6, \"passed\": true}, {\"check\": \"control [\\\"\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"12a\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"36073\\\"]\", \"actual\": 5, \"expected\": 5, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}