{"abstract":"An IBAN whose check digits are the out-of-range aliases 00 or 01 is accepted.","category":"Check-digit algorithms","checks":8,"contract":"IBAN validation for the countries DE 22, GB 22, FR 27, NL 18, BE 16, NO 15, MT 31 (other countries: \"malformed\"). Spaces (print format) are removed and letters are upper-cased. The check digits must be 02..98. Move the first four characters to the end, replace letters with 10..35, and the IBAN is \"valid\" when the number is 1 mod 97.","contract_signature":"s","evaluation_group":"w2-check_digit_algorithms-iban-mod97","failed_approach":"Rejecting only 00 still accepts the 01 alias of 98.","family":"w2-check_digit_algorithms-iban-mod97-check-digit-range","id":"FA-72496","implementations":{"attempt":{"sha256":"1def68e7a9453aea1198a760440bec2ee8053bac4a2a8d93d419af05107dd8a1","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    LENGTHS = {'DE': 22, 'GB': 22, 'FR': 27, 'NL': 18, 'BE': 16, 'NO': 15, 'MT': 31}\n    t = s.replace(' ', '').upper()\n    if len(t) < 5 or not t.isascii() or not t.isalnum():\n        return 'malformed'\n    if not t[:2].isalpha() or not t[2:4].isdigit() or t[2:4] == '00':\n        return 'malformed'\n    if LENGTHS.get(t[:2]) != len(t):\n        return 'malformed'\n    r = t[4:] + t[:4]\n    n = ''.join(str(int(ch, 36)) for ch in r)\n    return 'valid' if int(n) % 97 == 1 else 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"DE00050434738327048798\"]', ['DE00050434738327048798'], 'malformed'], ['regression [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['partial-repair [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['control [\"DE59811903138375291124\"]', ['DE59811903138375291124'], 'valid'], ['control [\"DE50296496123032354476\"]', ['DE50296496123032354476'], 'valid'], ['control [\"DE58862288567935243525\"]', ['DE58862288567935243525'], 'valid'], ['control [\"GB12YUBO17171961366336\"]', ['GB12YUBO17171961366336'], 'valid'], ['control [\"GB30TWRL09177880233695\"]', ['GB30TWRL09177880233695'], 'valid']], [['regression [\"DE00470841292401747110\"]', ['DE00470841292401747110'], 'malformed'], ['regression [\"DE00370400440532013000\"]', ['DE00370400440532013000'], 'malformed'], ['partial-repair [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['partial-repair [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['control [\"GB23HJGZ79203524065161\"]', ['GB23HJGZ79203524065161'], 'valid'], ['control [\"FR88HIO0QY01NRB0VCRB14QO450\"]', ['FR88HIO0QY01NRB0VCRB14QO450'], 'valid'], ['control [\"FR38Q7OJKEPW4X8D3YP3O6RO9CF\"]', ['FR38Q7OJKEPW4X8D3YP3O6RO9CF'], 'valid'], ['control [\"FR87B5LPN0GWM8FRHG96JYM18V0\"]', ['FR87B5LPN0GWM8FRHG96JYM18V0'], 'valid']], [['regression [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['regression [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['control [\"NL15KCEZ0926524218\"]', ['NL15KCEZ0926524218'], 'valid'], ['control [\"NL97OZQU5858488442\"]', ['NL97OZQU5858488442'], 'valid'], ['control [\"BE73177155519075\"]', ['BE73177155519075'], 'valid'], ['control [\"BE31287393626938\"]', ['BE31287393626938'], 'valid'], ['control [\"BE87587165649240\"]', ['BE87587165649240'], 'valid'], ['control [\"NO5861733992430\"]', ['NO5861733992430'], 'valid']], [['regression [\"DE00370400440532013000\"]', ['DE00370400440532013000'], 'malformed'], ['regression [\"DE00050434738327048798\"]', ['DE00050434738327048798'], 'malformed'], ['partial-repair [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['partial-repair [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['control [\"NO5861733992430\"]', ['NO5861733992430'], 'valid'], ['control [\"NO7438063392154\"]', ['NO7438063392154'], 'valid'], ['control [\"NO8414946034784\"]', ['NO8414946034784'], 'valid'], ['control [\"MT48QBGB31246251447244909393188\"]', ['MT48QBGB31246251447244909393188'], 'valid']], [['regression [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['regression [\"DE00470841292401747110\"]', ['DE00470841292401747110'], 'malformed'], ['partial-repair [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['control [\"MT98JHCG63199638448964680432116\"]', ['MT98JHCG63199638448964680432116'], 'valid'], ['control [\"DE59811903138375291127\"]', ['DE59811903138375291127'], 'invalid'], ['control [\"DE50296496123032354477\"]', ['DE50296496123032354477'], 'invalid'], ['control [\"DE58862288567935243527\"]', ['DE58862288567935243527'], 'invalid'], ['control [\"GB12YUBO17171961366337\"]', ['GB12YUBO17171961366337'], 'invalid']]]\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":"0e0da12e4364c8e236b3d68af7e2d234b5b333fcd2e5cd7c17bcf275b7339a79","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    LENGTHS = {'DE': 22, 'GB': 22, 'FR': 27, 'NL': 18, 'BE': 16, 'NO': 15, 'MT': 31}\n    t = s.replace(' ', '').upper()\n    if len(t) < 5 or not t.isascii() or not t.isalnum():\n        return 'malformed'\n    if not t[:2].isalpha() or not t[2:4].isdigit():\n        return 'malformed'\n    if LENGTHS.get(t[:2]) != len(t):\n        return 'malformed'\n    r = t[4:] + t[:4]\n    n = ''.join(str(int(ch, 36)) for ch in r)\n    return 'valid' if int(n) % 97 == 1 else 'invalid'\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"DE00050434738327048798\"]', ['DE00050434738327048798'], 'malformed'], ['regression [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['partial-repair [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['control [\"DE59811903138375291124\"]', ['DE59811903138375291124'], 'valid'], ['control [\"DE50296496123032354476\"]', ['DE50296496123032354476'], 'valid'], ['control [\"DE58862288567935243525\"]', ['DE58862288567935243525'], 'valid'], ['control [\"GB12YUBO17171961366336\"]', ['GB12YUBO17171961366336'], 'valid'], ['control [\"GB30TWRL09177880233695\"]', ['GB30TWRL09177880233695'], 'valid']], [['regression [\"DE00470841292401747110\"]', ['DE00470841292401747110'], 'malformed'], ['regression [\"DE00370400440532013000\"]', ['DE00370400440532013000'], 'malformed'], ['partial-repair [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['partial-repair [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['control [\"GB23HJGZ79203524065161\"]', ['GB23HJGZ79203524065161'], 'valid'], ['control [\"FR88HIO0QY01NRB0VCRB14QO450\"]', ['FR88HIO0QY01NRB0VCRB14QO450'], 'valid'], ['control [\"FR38Q7OJKEPW4X8D3YP3O6RO9CF\"]', ['FR38Q7OJKEPW4X8D3YP3O6RO9CF'], 'valid'], ['control [\"FR87B5LPN0GWM8FRHG96JYM18V0\"]', ['FR87B5LPN0GWM8FRHG96JYM18V0'], 'valid']], [['regression [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['regression [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['control [\"NL15KCEZ0926524218\"]', ['NL15KCEZ0926524218'], 'valid'], ['control [\"NL97OZQU5858488442\"]', ['NL97OZQU5858488442'], 'valid'], ['control [\"BE73177155519075\"]', ['BE73177155519075'], 'valid'], ['control [\"BE31287393626938\"]', ['BE31287393626938'], 'valid'], ['control [\"BE87587165649240\"]', ['BE87587165649240'], 'valid'], ['control [\"NO5861733992430\"]', ['NO5861733992430'], 'valid']], [['regression [\"DE00370400440532013000\"]', ['DE00370400440532013000'], 'malformed'], ['regression [\"DE00050434738327048798\"]', ['DE00050434738327048798'], 'malformed'], ['partial-repair [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['partial-repair [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['control [\"NO5861733992430\"]', ['NO5861733992430'], 'valid'], ['control [\"NO7438063392154\"]', ['NO7438063392154'], 'valid'], ['control [\"NO8414946034784\"]', ['NO8414946034784'], 'valid'], ['control [\"MT48QBGB31246251447244909393188\"]', ['MT48QBGB31246251447244909393188'], 'valid']], [['regression [\"DE01435241396484727591\"]', ['DE01435241396484727591'], 'malformed'], ['regression [\"DE00470841292401747110\"]', ['DE00470841292401747110'], 'malformed'], ['partial-repair [\"DE01819403115748858673\"]', ['DE01819403115748858673'], 'malformed'], ['control [\"MT98JHCG63199638448964680432116\"]', ['MT98JHCG63199638448964680432116'], 'valid'], ['control [\"DE59811903138375291127\"]', ['DE59811903138375291127'], 'invalid'], ['control [\"DE50296496123032354477\"]', ['DE50296496123032354477'], 'invalid'], ['control [\"DE58862288567935243527\"]', ['DE58862288567935243527'], 'invalid'], ['control [\"GB12YUBO17171961366337\"]', ['GB12YUBO17171961366337'], 'invalid']]]\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-iban-mod97-check-digit-range","generated_at":"2026-09-29T14:48:39.038076+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Payment initiation rejects mistyped account identifiers before submitting transfers.","root_cause":"The 02..98 range test is missing; 01 is congruent to 98 and 00 to 97 modulo 97.","sha256":"ed1d1c31d016126fb283366ecb8305df277c58efc759e91415856ea8e6c56f8f","title":"IBAN accepts check digits 00 and 01 · 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":37.455,"exit_code":1,"observations":[{"actual":"malformed","check":"regression [\"DE00050434738327048798\"]","expected":"malformed","passed":true},{"actual":"valid","check":"regression [\"DE01819403115748858673\"]","expected":"malformed","passed":false},{"actual":"valid","check":"partial-repair [\"DE01435241396484727591\"]","expected":"malformed","passed":false},{"actual":"valid","check":"control [\"DE59811903138375291124\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"DE50296496123032354476\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"DE58862288567935243525\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"GB12YUBO17171961366336\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"GB30TWRL09177880233695\"]","expected":"valid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"DE00050434738327048798\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"regression [\\\"DE01819403115748858673\\\"]\", \"actual\": \"valid\", \"expected\": \"malformed\", \"passed\": false}, {\"check\": \"partial-repair [\\\"DE01435241396484727591\\\"]\", \"actual\": \"valid\", \"expected\": \"malformed\", \"passed\": false}, {\"check\": \"control [\\\"DE59811903138375291124\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"DE50296496123032354476\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"DE58862288567935243525\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"GB12YUBO17171961366336\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"GB30TWRL09177880233695\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":39.696,"exit_code":1,"observations":[{"actual":"valid","check":"regression [\"DE00050434738327048798\"]","expected":"malformed","passed":false},{"actual":"valid","check":"regression [\"DE01819403115748858673\"]","expected":"malformed","passed":false},{"actual":"valid","check":"partial-repair [\"DE01435241396484727591\"]","expected":"malformed","passed":false},{"actual":"valid","check":"control [\"DE59811903138375291124\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"DE50296496123032354476\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"DE58862288567935243525\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"GB12YUBO17171961366336\"]","expected":"valid","passed":true},{"actual":"valid","check":"control [\"GB30TWRL09177880233695\"]","expected":"valid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"DE00050434738327048798\\\"]\", \"actual\": \"valid\", \"expected\": \"malformed\", \"passed\": false}, {\"check\": \"regression [\\\"DE01819403115748858673\\\"]\", \"actual\": \"valid\", \"expected\": \"malformed\", \"passed\": false}, {\"check\": \"partial-repair [\\\"DE01435241396484727591\\\"]\", \"actual\": \"valid\", \"expected\": \"malformed\", \"passed\": false}, {\"check\": \"control [\\\"DE59811903138375291124\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"DE50296496123032354476\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"DE58862288567935243525\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"GB12YUBO17171961366336\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"control [\\\"GB30TWRL09177880233695\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"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."}}