{"abstract":"Identifiers from unsupported countries and truncated IBANs get a mod-97 verdict.","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":"A generic 34-character ceiling still admits unknown countries and wrong lengths.","family":"w2-check_digit_algorithms-iban-mod97-country-length","id":"FA-72481","implementations":{"attempt":{"sha256":"70342cdf6b86ba194c218a2ced35099dba6971b54e1c7e3a92846e75f6d45bf8","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 not 2 <= int(t[2:4]) <= 98:\n        return 'malformed'\n    if len(t) > 34:\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 [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['regression [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], 'malformed'], ['control [\"DE59811903138375291124\"]', ['DE59811903138375291124'], 'valid'], ['control [\"DE50296496123032354476\"]', ['DE50296496123032354476'], 'valid'], ['control [\"DE58862288567935243525\"]', ['DE58862288567935243525'], 'valid'], ['control [\"GB12YUBO17171961366336\"]', ['GB12YUBO17171961366336'], 'valid'], ['control [\"GB30TWRL09177880233695\"]', ['GB30TWRL09177880233695'], 'valid'], ['control [\"GB23HJGZ79203524065161\"]', ['GB23HJGZ79203524065161'], 'valid']], [['regression [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], 'malformed'], ['regression [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['control [\"GB23HJGZ79203524065161\"]', ['GB23HJGZ79203524065161'], 'valid'], ['control [\"FR88HIO0QY01NRB0VCRB14QO450\"]', ['FR88HIO0QY01NRB0VCRB14QO450'], 'valid'], ['control [\"FR38Q7OJKEPW4X8D3YP3O6RO9CF\"]', ['FR38Q7OJKEPW4X8D3YP3O6RO9CF'], 'valid'], ['control [\"FR87B5LPN0GWM8FRHG96JYM18V0\"]', ['FR87B5LPN0GWM8FRHG96JYM18V0'], 'valid'], ['control [\"NL34HYUK1800961826\"]', ['NL34HYUK1800961826'], 'valid'], ['control [\"NL15KCEZ0926524218\"]', ['NL15KCEZ0926524218'], 'valid']], [['regression [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['regression [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], '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 [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], 'malformed'], ['regression [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['control [\"NO5861733992430\"]', ['NO5861733992430'], 'valid'], ['control [\"NO7438063392154\"]', ['NO7438063392154'], 'valid'], ['control [\"NO8414946034784\"]', ['NO8414946034784'], 'valid'], ['control [\"MT48QBGB31246251447244909393188\"]', ['MT48QBGB31246251447244909393188'], 'valid'], ['control [\"MT24EODH27387088780936299640502\"]', ['MT24EODH27387088780936299640502'], 'valid'], ['control [\"MT98JHCG63199638448964680432116\"]', ['MT98JHCG63199638448964680432116'], 'valid']], [['regression [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['regression [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], 'malformed'], ['control [\"MT98JHCG63199638448964680432116\"]', ['MT98JHCG63199638448964680432116'], 'valid'], ['control [\"DE59811903138375291127\"]', ['DE59811903138375291127'], 'invalid'], ['control [\"DE50296496123032354477\"]', ['DE50296496123032354477'], 'invalid'], ['control [\"DE58862288567935243527\"]', ['DE58862288567935243527'], 'invalid'], ['control [\"GB12YUBO17171961366337\"]', ['GB12YUBO17171961366337'], 'invalid'], ['control [\"GB30TWRL09177880233697\"]', ['GB30TWRL09177880233697'], '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":"cc3ef415765723a43e84a3a3378d42e4f89bcc7a11c77477ac4b35ad6f5383bc","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 not 2 <= int(t[2:4]) <= 98:\n        return 'malformed'\n    if LENGTHS.get(t[:2], len(t)) != 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 [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['regression [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], 'malformed'], ['control [\"DE59811903138375291124\"]', ['DE59811903138375291124'], 'valid'], ['control [\"DE50296496123032354476\"]', ['DE50296496123032354476'], 'valid'], ['control [\"DE58862288567935243525\"]', ['DE58862288567935243525'], 'valid'], ['control [\"GB12YUBO17171961366336\"]', ['GB12YUBO17171961366336'], 'valid'], ['control [\"GB30TWRL09177880233695\"]', ['GB30TWRL09177880233695'], 'valid'], ['control [\"GB23HJGZ79203524065161\"]', ['GB23HJGZ79203524065161'], 'valid']], [['regression [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], 'malformed'], ['regression [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['control [\"GB23HJGZ79203524065161\"]', ['GB23HJGZ79203524065161'], 'valid'], ['control [\"FR88HIO0QY01NRB0VCRB14QO450\"]', ['FR88HIO0QY01NRB0VCRB14QO450'], 'valid'], ['control [\"FR38Q7OJKEPW4X8D3YP3O6RO9CF\"]', ['FR38Q7OJKEPW4X8D3YP3O6RO9CF'], 'valid'], ['control [\"FR87B5LPN0GWM8FRHG96JYM18V0\"]', ['FR87B5LPN0GWM8FRHG96JYM18V0'], 'valid'], ['control [\"NL34HYUK1800961826\"]', ['NL34HYUK1800961826'], 'valid'], ['control [\"NL15KCEZ0926524218\"]', ['NL15KCEZ0926524218'], 'valid']], [['regression [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['regression [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], '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 [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], 'malformed'], ['regression [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['control [\"NO5861733992430\"]', ['NO5861733992430'], 'valid'], ['control [\"NO7438063392154\"]', ['NO7438063392154'], 'valid'], ['control [\"NO8414946034784\"]', ['NO8414946034784'], 'valid'], ['control [\"MT48QBGB31246251447244909393188\"]', ['MT48QBGB31246251447244909393188'], 'valid'], ['control [\"MT24EODH27387088780936299640502\"]', ['MT24EODH27387088780936299640502'], 'valid'], ['control [\"MT98JHCG63199638448964680432116\"]', ['MT98JHCG63199638448964680432116'], 'valid']], [['regression [\"XX82WEST12345698765432\"]', ['XX82WEST12345698765432'], 'malformed'], ['regression [\"US64SVBKUS6S3300958879\"]', ['US64SVBKUS6S3300958879'], 'malformed'], ['control [\"MT98JHCG63199638448964680432116\"]', ['MT98JHCG63199638448964680432116'], 'valid'], ['control [\"DE59811903138375291127\"]', ['DE59811903138375291127'], 'invalid'], ['control [\"DE50296496123032354477\"]', ['DE50296496123032354477'], 'invalid'], ['control [\"DE58862288567935243527\"]', ['DE58862288567935243527'], 'invalid'], ['control [\"GB12YUBO17171961366337\"]', ['GB12YUBO17171961366337'], 'invalid'], ['control [\"GB30TWRL09177880233697\"]', ['GB30TWRL09177880233697'], '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-country-length","generated_at":"2026-09-29T14:48:38.961304+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 length lookup defaults to the actual length, so any country code passes.","sha256":"a52a5c40904a77ada319fbc514a40994987c0f702d8a3b05b816dc3067db3369","title":"IBAN accepts unknown countries of any length · 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":36.942,"exit_code":1,"observations":[{"actual":"invalid","check":"regression [\"XX82WEST12345698765432\"]","expected":"malformed","passed":false},{"actual":"valid","check":"regression [\"US64SVBKUS6S3300958879\"]","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},{"actual":"valid","check":"control [\"GB23HJGZ79203524065161\"]","expected":"valid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"XX82WEST12345698765432\\\"]\", \"actual\": \"invalid\", \"expected\": \"malformed\", \"passed\": false}, {\"check\": \"regression [\\\"US64SVBKUS6S3300958879\\\"]\", \"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}, {\"check\": \"control [\\\"GB23HJGZ79203524065161\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.066,"exit_code":1,"observations":[{"actual":"invalid","check":"regression [\"XX82WEST12345698765432\"]","expected":"malformed","passed":false},{"actual":"valid","check":"regression [\"US64SVBKUS6S3300958879\"]","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},{"actual":"valid","check":"control [\"GB23HJGZ79203524065161\"]","expected":"valid","passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"XX82WEST12345698765432\\\"]\", \"actual\": \"invalid\", \"expected\": \"malformed\", \"passed\": false}, {\"check\": \"regression [\\\"US64SVBKUS6S3300958879\\\"]\", \"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}, {\"check\": \"control [\\\"GB23HJGZ79203524065161\\\"]\", \"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."}}