{"abstract":"Cards issued at the top of the 2-series BIN range are reported as unknown.","category":"Check-digit algorithms","checks":8,"contract":"Card number screening: spaces removed, nonempty ASCII digits required (else \"malformed\"). Network by prefix and length: visa 4 with 13/16/19 digits; amex 34 or 37 with 15; mastercard 51-55 or 2221-2720 with 16; discover 6011, 644-649 or 65 with 16-19; otherwise \"unknown\". Return [network, Luhn validity].","contract_signature":"s","evaluation_group":"w2-check_digit_algorithms-card-network","failed_approach":"Widening the bound to 2799 claims unassigned prefixes for Mastercard.","family":"w2-check_digit_algorithms-card-network-mastercard-2-series","id":"FA-72751","implementations":{"attempt":{"sha256":"3cb01c779bd8185f2b0cd9177f352ee1a02b73522248904d53f0a7a13bd42bdb","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    t = s.replace(' ', '')\n    if not t or not t.isascii() or not t.isdigit():\n        return 'malformed'\n    n = len(t)\n    if t[0] == '4' and n in (13, 16, 19):\n        net = 'visa'\n    elif t[:2] in ('34', '37') and n == 15:\n        net = 'amex'\n    elif (51 <= int(t[:2]) <= 55 or 2221 <= int(t[:4]) <= 2799) and n == 16:\n        net = 'mastercard'\n    elif (t[:4] == '6011' or 644 <= int(t[:3]) <= 649 or t[:2] == '65') and 16 <= n <= 19:\n        net = 'discover'\n    else:\n        net = 'unknown'\n    total = 0\n    for i, ch in enumerate(reversed(t)):\n        d = int(ch) * (2 if i % 2 else 1)\n        total += d - 9 if d > 9 else d\n    return [net, total % 10 == 0]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"4846348185497646\"]', ['4846348185497646'], ['visa', False]], ['control [\"4677178611987\"]', ['4677178611987'], ['visa', False]], ['control [\"4654355756337734313\"]', ['4654355756337734313'], ['visa', False]], ['control [\"341466066267172\"]', ['341466066267172'], ['amex', False]], ['control [\"376431358491919\"]', ['376431358491919'], ['amex', False]], ['control [\"351552971521401\"]', ['351552971521401'], ['unknown', True]]], [['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"351552971521401\"]', ['351552971521401'], ['unknown', True]], ['control [\"367788575584486\"]', ['367788575584486'], ['unknown', False]], ['control [\"5168420993367718\"]', ['5168420993367718'], ['mastercard', False]], ['control [\"5518245380112330\"]', ['5518245380112330'], ['mastercard', False]], ['control [\"5656984207856782\"]', ['5656984207856782'], ['unknown', False]], ['control [\"2221631854572594\"]', ['2221631854572594'], ['mastercard', False]]], [['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"2221631854572594\"]', ['2221631854572594'], ['mastercard', False]], ['control [\"2719349847162292\"]', ['2719349847162292'], ['mastercard', False]], ['control [\"6011388299412119\"]', ['6011388299412119'], ['discover', False]], ['control [\"6441839750335463\"]', ['6441839750335463'], ['discover', False]], ['control [\"6490399248434857177\"]', ['6490399248434857177'], ['discover', False]], ['control [\"6408243514832764\"]', ['6408243514832764'], ['unknown', False]]], [['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"6408243514832764\"]', ['6408243514832764'], ['unknown', False]], ['control [\"6438800916518222\"]', ['6438800916518222'], ['unknown', False]], ['control [\"65813918194527509\"]', ['65813918194527509'], ['discover', False]], ['control [\"6692677811687578\"]', ['6692677811687578'], ['unknown', True]], ['control [\"4111 1111 1111 1111\"]', ['4111 1111 1111 1111'], ['visa', True]], ['control [\"378282246310005\"]', ['378282246310005'], ['amex', True]]], [['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"378282246310005\"]', ['378282246310005'], ['amex', True]], ['control [\"5555555555554444\"]', ['5555555555554444'], ['mastercard', True]], ['control [\"2223003122003222\"]', ['2223003122003222'], ['mastercard', True]], ['control [\"6011111111111117\"]', ['6011111111111117'], ['discover', True]], ['control [\"4111-1111\"]', ['4111-1111'], 'malformed'], ['control [\"\"]', [''], 'malformed']]]\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":"2b2ea289ba18573dd212f4afbcf0835ec64b3ff1f28d13bb2bdb14cfd8ec7ff3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    t = s.replace(' ', '')\n    if not t or not t.isascii() or not t.isdigit():\n        return 'malformed'\n    n = len(t)\n    if t[0] == '4' and n in (13, 16, 19):\n        net = 'visa'\n    elif t[:2] in ('34', '37') and n == 15:\n        net = 'amex'\n    elif (51 <= int(t[:2]) <= 55 or 2221 <= int(t[:4]) < 2720) and n == 16:\n        net = 'mastercard'\n    elif (t[:4] == '6011' or 644 <= int(t[:3]) <= 649 or t[:2] == '65') and 16 <= n <= 19:\n        net = 'discover'\n    else:\n        net = 'unknown'\n    total = 0\n    for i, ch in enumerate(reversed(t)):\n        d = int(ch) * (2 if i % 2 else 1)\n        total += d - 9 if d > 9 else d\n    return [net, total % 10 == 0]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"4846348185497646\"]', ['4846348185497646'], ['visa', False]], ['control [\"4677178611987\"]', ['4677178611987'], ['visa', False]], ['control [\"4654355756337734313\"]', ['4654355756337734313'], ['visa', False]], ['control [\"341466066267172\"]', ['341466066267172'], ['amex', False]], ['control [\"376431358491919\"]', ['376431358491919'], ['amex', False]], ['control [\"351552971521401\"]', ['351552971521401'], ['unknown', True]]], [['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"351552971521401\"]', ['351552971521401'], ['unknown', True]], ['control [\"367788575584486\"]', ['367788575584486'], ['unknown', False]], ['control [\"5168420993367718\"]', ['5168420993367718'], ['mastercard', False]], ['control [\"5518245380112330\"]', ['5518245380112330'], ['mastercard', False]], ['control [\"5656984207856782\"]', ['5656984207856782'], ['unknown', False]], ['control [\"2221631854572594\"]', ['2221631854572594'], ['mastercard', False]]], [['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"2221631854572594\"]', ['2221631854572594'], ['mastercard', False]], ['control [\"2719349847162292\"]', ['2719349847162292'], ['mastercard', False]], ['control [\"6011388299412119\"]', ['6011388299412119'], ['discover', False]], ['control [\"6441839750335463\"]', ['6441839750335463'], ['discover', False]], ['control [\"6490399248434857177\"]', ['6490399248434857177'], ['discover', False]], ['control [\"6408243514832764\"]', ['6408243514832764'], ['unknown', False]]], [['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"6408243514832764\"]', ['6408243514832764'], ['unknown', False]], ['control [\"6438800916518222\"]', ['6438800916518222'], ['unknown', False]], ['control [\"65813918194527509\"]', ['65813918194527509'], ['discover', False]], ['control [\"6692677811687578\"]', ['6692677811687578'], ['unknown', True]], ['control [\"4111 1111 1111 1111\"]', ['4111 1111 1111 1111'], ['visa', True]], ['control [\"378282246310005\"]', ['378282246310005'], ['amex', True]]], [['regression [\"2720611269032342\"]', ['2720611269032342'], ['mastercard', False]], ['partial-repair [\"2721101650461399\"]', ['2721101650461399'], ['unknown', False]], ['control [\"378282246310005\"]', ['378282246310005'], ['amex', True]], ['control [\"5555555555554444\"]', ['5555555555554444'], ['mastercard', True]], ['control [\"2223003122003222\"]', ['2223003122003222'], ['mastercard', True]], ['control [\"6011111111111117\"]', ['6011111111111117'], ['discover', True]], ['control [\"4111-1111\"]', ['4111-1111'], 'malformed'], ['control [\"\"]', [''], 'malformed']]]\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-card-network-mastercard-2-series","generated_at":"2026-09-29T14:48:41.257931+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Checkout forms route card numbers to the right processor and reject Luhn failures before authorization.","root_cause":"The 2-series upper bound is exclusive (< 2720).","sha256":"da799fade5ead31054fbd5a45c6800e91f053b3fb06e1225da1be561a1f3d810","title":"Mastercard 2-series range excludes 2720 · 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":40.091,"exit_code":1,"observations":[{"actual":["mastercard",false],"check":"regression [\"2720611269032342\"]","expected":["mastercard",false],"passed":true},{"actual":["mastercard",false],"check":"partial-repair [\"2721101650461399\"]","expected":["unknown",false],"passed":false},{"actual":["visa",false],"check":"control [\"4846348185497646\"]","expected":["visa",false],"passed":true},{"actual":["visa",false],"check":"control [\"4677178611987\"]","expected":["visa",false],"passed":true},{"actual":["visa",false],"check":"control [\"4654355756337734313\"]","expected":["visa",false],"passed":true},{"actual":["amex",false],"check":"control [\"341466066267172\"]","expected":["amex",false],"passed":true},{"actual":["amex",false],"check":"control [\"376431358491919\"]","expected":["amex",false],"passed":true},{"actual":["unknown",true],"check":"control [\"351552971521401\"]","expected":["unknown",true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"2720611269032342\\\"]\", \"actual\": [\"mastercard\", false], \"expected\": [\"mastercard\", false], \"passed\": true}, {\"check\": \"partial-repair [\\\"2721101650461399\\\"]\", \"actual\": [\"mastercard\", false], \"expected\": [\"unknown\", false], \"passed\": false}, {\"check\": \"control [\\\"4846348185497646\\\"]\", \"actual\": [\"visa\", false], \"expected\": [\"visa\", false], \"passed\": true}, {\"check\": \"control [\\\"4677178611987\\\"]\", \"actual\": [\"visa\", false], \"expected\": [\"visa\", false], \"passed\": true}, {\"check\": \"control [\\\"4654355756337734313\\\"]\", \"actual\": [\"visa\", false], \"expected\": [\"visa\", false], \"passed\": true}, {\"check\": \"control [\\\"341466066267172\\\"]\", \"actual\": [\"amex\", false], \"expected\": [\"amex\", false], \"passed\": true}, {\"check\": \"control [\\\"376431358491919\\\"]\", \"actual\": [\"amex\", false], \"expected\": [\"amex\", false], \"passed\": true}, {\"check\": \"control [\\\"351552971521401\\\"]\", \"actual\": [\"unknown\", true], \"expected\": [\"unknown\", true], \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.123,"exit_code":1,"observations":[{"actual":["unknown",false],"check":"regression [\"2720611269032342\"]","expected":["mastercard",false],"passed":false},{"actual":["unknown",false],"check":"partial-repair [\"2721101650461399\"]","expected":["unknown",false],"passed":true},{"actual":["visa",false],"check":"control [\"4846348185497646\"]","expected":["visa",false],"passed":true},{"actual":["visa",false],"check":"control [\"4677178611987\"]","expected":["visa",false],"passed":true},{"actual":["visa",false],"check":"control [\"4654355756337734313\"]","expected":["visa",false],"passed":true},{"actual":["amex",false],"check":"control [\"341466066267172\"]","expected":["amex",false],"passed":true},{"actual":["amex",false],"check":"control [\"376431358491919\"]","expected":["amex",false],"passed":true},{"actual":["unknown",true],"check":"control [\"351552971521401\"]","expected":["unknown",true],"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"2720611269032342\\\"]\", \"actual\": [\"unknown\", false], \"expected\": [\"mastercard\", false], \"passed\": false}, {\"check\": \"partial-repair [\\\"2721101650461399\\\"]\", \"actual\": [\"unknown\", false], \"expected\": [\"unknown\", false], \"passed\": true}, {\"check\": \"control [\\\"4846348185497646\\\"]\", \"actual\": [\"visa\", false], \"expected\": [\"visa\", false], \"passed\": true}, {\"check\": \"control [\\\"4677178611987\\\"]\", \"actual\": [\"visa\", false], \"expected\": [\"visa\", false], \"passed\": true}, {\"check\": \"control [\\\"4654355756337734313\\\"]\", \"actual\": [\"visa\", false], \"expected\": [\"visa\", false], \"passed\": true}, {\"check\": \"control [\\\"341466066267172\\\"]\", \"actual\": [\"amex\", false], \"expected\": [\"amex\", false], \"passed\": true}, {\"check\": \"control [\\\"376431358491919\\\"]\", \"actual\": [\"amex\", false], \"expected\": [\"amex\", false], \"passed\": true}, {\"check\": \"control [\\\"351552971521401\\\"]\", \"actual\": [\"unknown\", true], \"expected\": [\"unknown\", true], \"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."}}