{"abstract":"IBANs copied in groups of four are reported malformed.","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":"Removing spaces without upper-casing leaves lowercase input unknown to the country table.","family":"w2-check_digit_algorithms-iban-mod97-print-format-normalization","id":"FA-72486","implementations":{"attempt":{"sha256":"eef5fbb0b7ee9dc64887c91644df4d6854f7cb0da0e9a682686ad71d759c6d26","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(' ', '')\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):\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 [\"DE59 8119 0313 8375 2911 24\"]', ['DE59 8119 0313 8375 2911 24'], 'valid'], ['regression [\"DE50 2964 9612 3032 3544 76\"]', ['DE50 2964 9612 3032 3544 76'], 'valid'], ['partial-repair [\"gb23hjgz79203524065161\"]', ['gb23hjgz79203524065161'], 'valid'], ['partial-repair [\"fr88hio0qy01nrb0vcrb14qo450\"]', ['fr88hio0qy01nrb0vcrb14qo450'], 'valid'], ['control [\"DE59811903138375291124\"]', ['DE59811903138375291124'], 'valid'], ['control [\"DE50296496123032354476\"]', ['DE50296496123032354476'], 'valid'], ['control [\"DE58862288567935243525\"]', ['DE58862288567935243525'], 'valid'], ['control [\"GB12YUBO17171961366336\"]', ['GB12YUBO17171961366336'], 'valid']], [['regression [\"GB12 YUBO 1717 1961 3663 36\"]', ['GB12 YUBO 1717 1961 3663 36'], 'valid'], ['regression [\"GB30 TWRL 0917 7880 2336 95\"]', ['GB30 TWRL 0917 7880 2336 95'], 'valid'], ['partial-repair [\"fr87b5lpn0gwm8frhg96jym18v0\"]', ['fr87b5lpn0gwm8frhg96jym18v0'], 'valid'], ['partial-repair [\"gb82west12345698765432\"]', ['gb82west12345698765432'], 'valid'], ['control [\"GB23HJGZ79203524065161\"]', ['GB23HJGZ79203524065161'], 'valid'], ['control [\"FR88HIO0QY01NRB0VCRB14QO450\"]', ['FR88HIO0QY01NRB0VCRB14QO450'], 'valid'], ['control [\"FR38Q7OJKEPW4X8D3YP3O6RO9CF\"]', ['FR38Q7OJKEPW4X8D3YP3O6RO9CF'], 'valid'], ['control [\"FR87B5LPN0GWM8FRHG96JYM18V0\"]', ['FR87B5LPN0GWM8FRHG96JYM18V0'], 'valid']], [['regression [\"DE59 8119 0313 8375 2911 24\"]', ['DE59 8119 0313 8375 2911 24'], 'valid'], ['regression [\"DE50 2964 9612 3032 3544 76\"]', ['DE50 2964 9612 3032 3544 76'], 'valid'], ['partial-repair [\"fr88hio0qy01nrb0vcrb14qo450\"]', ['fr88hio0qy01nrb0vcrb14qo450'], 'valid'], ['partial-repair [\"fr38q7ojkepw4x8d3yp3o6ro9cf\"]', ['fr38q7ojkepw4x8d3yp3o6ro9cf'], 'valid'], ['control [\"NL15KCEZ0926524218\"]', ['NL15KCEZ0926524218'], 'valid'], ['control [\"NL97OZQU5858488442\"]', ['NL97OZQU5858488442'], 'valid'], ['control [\"BE73177155519075\"]', ['BE73177155519075'], 'valid'], ['control [\"BE31287393626938\"]', ['BE31287393626938'], 'valid']], [['regression [\"GB12 YUBO 1717 1961 3663 36\"]', ['GB12 YUBO 1717 1961 3663 36'], 'valid'], ['regression [\"GB30 TWRL 0917 7880 2336 95\"]', ['GB30 TWRL 0917 7880 2336 95'], 'valid'], ['partial-repair [\"gb82west12345698765432\"]', ['gb82west12345698765432'], 'valid'], ['partial-repair [\"gb23hjgz79203524065161\"]', ['gb23hjgz79203524065161'], 'valid'], ['control [\"NO5861733992430\"]', ['NO5861733992430'], 'valid'], ['control [\"NO7438063392154\"]', ['NO7438063392154'], 'valid'], ['control [\"NO8414946034784\"]', ['NO8414946034784'], 'valid'], ['control [\"MT48QBGB31246251447244909393188\"]', ['MT48QBGB31246251447244909393188'], 'valid']], [['regression [\"DE59 8119 0313 8375 2911 24\"]', ['DE59 8119 0313 8375 2911 24'], 'valid'], ['regression [\"DE50 2964 9612 3032 3544 76\"]', ['DE50 2964 9612 3032 3544 76'], 'valid'], ['partial-repair [\"fr38q7ojkepw4x8d3yp3o6ro9cf\"]', ['fr38q7ojkepw4x8d3yp3o6ro9cf'], 'valid'], ['partial-repair [\"fr87b5lpn0gwm8frhg96jym18v0\"]', ['fr87b5lpn0gwm8frhg96jym18v0'], 'valid'], ['control [\"MT98JHCG63199638448964680432116\"]', ['MT98JHCG63199638448964680432116'], 'valid'], ['control [\"DE59811903138375291127\"]', ['DE59811903138375291127'], 'invalid'], ['control [\"DE50296496123032354477\"]', ['DE50296496123032354477'], 'invalid'], ['control [\"DE58862288567935243527\"]', ['DE58862288567935243527'], '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":"67c6f61039a4a3d020ef18cabb5aac325749bb7fc415bef937550d61033abe65","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.strip().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):\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 [\"DE59 8119 0313 8375 2911 24\"]', ['DE59 8119 0313 8375 2911 24'], 'valid'], ['regression [\"DE50 2964 9612 3032 3544 76\"]', ['DE50 2964 9612 3032 3544 76'], 'valid'], ['partial-repair [\"gb23hjgz79203524065161\"]', ['gb23hjgz79203524065161'], 'valid'], ['partial-repair [\"fr88hio0qy01nrb0vcrb14qo450\"]', ['fr88hio0qy01nrb0vcrb14qo450'], 'valid'], ['control [\"DE59811903138375291124\"]', ['DE59811903138375291124'], 'valid'], ['control [\"DE50296496123032354476\"]', ['DE50296496123032354476'], 'valid'], ['control [\"DE58862288567935243525\"]', ['DE58862288567935243525'], 'valid'], ['control [\"GB12YUBO17171961366336\"]', ['GB12YUBO17171961366336'], 'valid']], [['regression [\"GB12 YUBO 1717 1961 3663 36\"]', ['GB12 YUBO 1717 1961 3663 36'], 'valid'], ['regression [\"GB30 TWRL 0917 7880 2336 95\"]', ['GB30 TWRL 0917 7880 2336 95'], 'valid'], ['partial-repair [\"fr87b5lpn0gwm8frhg96jym18v0\"]', ['fr87b5lpn0gwm8frhg96jym18v0'], 'valid'], ['partial-repair [\"gb82west12345698765432\"]', ['gb82west12345698765432'], 'valid'], ['control [\"GB23HJGZ79203524065161\"]', ['GB23HJGZ79203524065161'], 'valid'], ['control [\"FR88HIO0QY01NRB0VCRB14QO450\"]', ['FR88HIO0QY01NRB0VCRB14QO450'], 'valid'], ['control [\"FR38Q7OJKEPW4X8D3YP3O6RO9CF\"]', ['FR38Q7OJKEPW4X8D3YP3O6RO9CF'], 'valid'], ['control [\"FR87B5LPN0GWM8FRHG96JYM18V0\"]', ['FR87B5LPN0GWM8FRHG96JYM18V0'], 'valid']], [['regression [\"DE59 8119 0313 8375 2911 24\"]', ['DE59 8119 0313 8375 2911 24'], 'valid'], ['regression [\"DE50 2964 9612 3032 3544 76\"]', ['DE50 2964 9612 3032 3544 76'], 'valid'], ['partial-repair [\"fr88hio0qy01nrb0vcrb14qo450\"]', ['fr88hio0qy01nrb0vcrb14qo450'], 'valid'], ['partial-repair [\"fr38q7ojkepw4x8d3yp3o6ro9cf\"]', ['fr38q7ojkepw4x8d3yp3o6ro9cf'], 'valid'], ['control [\"NL15KCEZ0926524218\"]', ['NL15KCEZ0926524218'], 'valid'], ['control [\"NL97OZQU5858488442\"]', ['NL97OZQU5858488442'], 'valid'], ['control [\"BE73177155519075\"]', ['BE73177155519075'], 'valid'], ['control [\"BE31287393626938\"]', ['BE31287393626938'], 'valid']], [['regression [\"GB12 YUBO 1717 1961 3663 36\"]', ['GB12 YUBO 1717 1961 3663 36'], 'valid'], ['regression [\"GB30 TWRL 0917 7880 2336 95\"]', ['GB30 TWRL 0917 7880 2336 95'], 'valid'], ['partial-repair [\"gb82west12345698765432\"]', ['gb82west12345698765432'], 'valid'], ['partial-repair [\"gb23hjgz79203524065161\"]', ['gb23hjgz79203524065161'], 'valid'], ['control [\"NO5861733992430\"]', ['NO5861733992430'], 'valid'], ['control [\"NO7438063392154\"]', ['NO7438063392154'], 'valid'], ['control [\"NO8414946034784\"]', ['NO8414946034784'], 'valid'], ['control [\"MT48QBGB31246251447244909393188\"]', ['MT48QBGB31246251447244909393188'], 'valid']], [['regression [\"DE59 8119 0313 8375 2911 24\"]', ['DE59 8119 0313 8375 2911 24'], 'valid'], ['regression [\"DE50 2964 9612 3032 3544 76\"]', ['DE50 2964 9612 3032 3544 76'], 'valid'], ['partial-repair [\"fr38q7ojkepw4x8d3yp3o6ro9cf\"]', ['fr38q7ojkepw4x8d3yp3o6ro9cf'], 'valid'], ['partial-repair [\"fr87b5lpn0gwm8frhg96jym18v0\"]', ['fr87b5lpn0gwm8frhg96jym18v0'], 'valid'], ['control [\"MT98JHCG63199638448964680432116\"]', ['MT98JHCG63199638448964680432116'], 'valid'], ['control [\"DE59811903138375291127\"]', ['DE59811903138375291127'], 'invalid'], ['control [\"DE50296496123032354477\"]', ['DE50296496123032354477'], 'invalid'], ['control [\"DE58862288567935243527\"]', ['DE58862288567935243527'], '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-print-format-normalization","generated_at":"2026-09-29T14:48:38.996864+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":"Only leading and trailing whitespace is stripped, so the grouping spaces fail the alphanumeric test.","sha256":"125f861afb72120a20178358f9ac2d0006093063a08fbeb1092eb8255b0dde23","title":"IBAN print format keeps interior spaces · 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":38.719,"exit_code":1,"observations":[{"actual":"valid","check":"regression [\"DE59 8119 0313 8375 2911 24\"]","expected":"valid","passed":true},{"actual":"valid","check":"regression [\"DE50 2964 9612 3032 3544 76\"]","expected":"valid","passed":true},{"actual":"malformed","check":"partial-repair [\"gb23hjgz79203524065161\"]","expected":"valid","passed":false},{"actual":"malformed","check":"partial-repair [\"fr88hio0qy01nrb0vcrb14qo450\"]","expected":"valid","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}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"DE59 8119 0313 8375 2911 24\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"regression [\\\"DE50 2964 9612 3032 3544 76\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"partial-repair [\\\"gb23hjgz79203524065161\\\"]\", \"actual\": \"malformed\", \"expected\": \"valid\", \"passed\": false}, {\"check\": \"partial-repair [\\\"fr88hio0qy01nrb0vcrb14qo450\\\"]\", \"actual\": \"malformed\", \"expected\": \"valid\", \"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}], \"passed\": false}\n"},"broken":{"elapsed_ms":36.89,"exit_code":1,"observations":[{"actual":"malformed","check":"regression [\"DE59 8119 0313 8375 2911 24\"]","expected":"valid","passed":false},{"actual":"malformed","check":"regression [\"DE50 2964 9612 3032 3544 76\"]","expected":"valid","passed":false},{"actual":"valid","check":"partial-repair [\"gb23hjgz79203524065161\"]","expected":"valid","passed":true},{"actual":"valid","check":"partial-repair [\"fr88hio0qy01nrb0vcrb14qo450\"]","expected":"valid","passed":true},{"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}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"DE59 8119 0313 8375 2911 24\\\"]\", \"actual\": \"malformed\", \"expected\": \"valid\", \"passed\": false}, {\"check\": \"regression [\\\"DE50 2964 9612 3032 3544 76\\\"]\", \"actual\": \"malformed\", \"expected\": \"valid\", \"passed\": false}, {\"check\": \"partial-repair [\\\"gb23hjgz79203524065161\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"check\": \"partial-repair [\\\"fr88hio0qy01nrb0vcrb14qo450\\\"]\", \"actual\": \"valid\", \"expected\": \"valid\", \"passed\": true}, {\"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}], \"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."}}