{"abstract":"Converted numbers end with the old mod-11 check (sometimes X) instead of an EAN check digit.","category":"Check-digit algorithms","checks":8,"contract":"Convert a hyphenated or plain ISBN-10 to ISBN-13. The input must be a valid ISBN-10 (mod 11, X allowed as the final character) or None is returned. The result is \"978\" + the nine ISBN-10 payload digits + a freshly computed EAN-13 check digit (weights 1,3 alternating from the left).","evaluation_group":"w2-check_digit_algorithms-isbn10-to-13","failed_approach":"Recomputing the check but over the stale 13-character string still includes the old check character.","family":"w2-check_digit_algorithms-isbn10-to-13-stale-check-digit","id":"FA-72436","implementations":{"attempt":{"sha256":"4761199bc5c9223b7abe469e80371c24685a06d69c96e76f36f3e2dd81cd3373","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    t = s.replace('-', '')\n    if len(t) != 10 or not t.isascii() or not t[:9].isdigit() or not (t[9].isdigit() or t[9] == 'X'):\n        return None\n    if sum((10 - i) * (10 if ch == 'X' else int(ch)) for i, ch in enumerate(t)) % 11:\n        return None\n    body = '978' + t[:9] + ('0' if t[9] == 'X' else t[9])\n    total = sum(int(ch) * (1 if i % 2 == 0 else 3) for i, ch in enumerate(body))\n    return body[:12] + str((10 - total % 10) % 10)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"5892872939\"]', ['5892872939'], '9785892872935'], ['regression [\"2399553950\"]', ['2399553950'], '9782399553954'], ['partial-repair [\"9465545449\"]', ['9465545449'], '9789465545448'], ['control [\"5892872930\"]', ['5892872930'], None], ['control [\"2399553951\"]', ['2399553951'], None], ['control [\"9465545440\"]', ['9465545440'], None], ['control [\"8292844660\"]', ['8292844660'], None], ['control [\"9379774827\"]', ['9379774827'], None]], [['regression [\"829284466X\"]', ['829284466X'], '9788292844663'], ['regression [\"9379774826\"]', ['9379774826'], '9789379774828'], ['partial-repair [\"2266685686\"]', ['2266685686'], '9782266685689'], ['partial-repair [\"5900307905\"]', ['5900307905'], '9785900307909'], ['control [\"2266685687\"]', ['2266685687'], None], ['control [\"0306406153\"]', ['0306406153'], None], ['control [\"12345\"]', ['12345'], None], ['control [\"5892872930\"]', ['5892872930'], None]], [['regression [\"2892681790\"]', ['2892681790'], '9782892681796'], ['regression [\"5900307905\"]', ['5900307905'], '9785900307909'], ['partial-repair [\"7113753523\"]', ['7113753523'], '9787113753528'], ['partial-repair [\"1475433131\"]', ['1475433131'], '9781475433135'], ['control [\"9465545440\"]', ['9465545440'], None], ['control [\"8292844660\"]', ['8292844660'], None], ['control [\"9379774827\"]', ['9379774827'], None], ['control [\"2266685687\"]', ['2266685687'], None]], [['regression [\"7113753523\"]', ['7113753523'], '9787113753528'], ['regression [\"1475433131\"]', ['1475433131'], '9781475433135'], ['partial-repair [\"8449627923\"]', ['8449627923'], '9788449627927'], ['partial-repair [\"0436178273\"]', ['0436178273'], '9780436178276'], ['control [\"12345\"]', ['12345'], None], ['control [\"5892872930\"]', ['5892872930'], None], ['control [\"2399553951\"]', ['2399553951'], None], ['control [\"9465545440\"]', ['9465545440'], None]], [['regression [\"8449627923\"]', ['8449627923'], '9788449627927'], ['regression [\"0436178273\"]', ['0436178273'], '9780436178276'], ['partial-repair [\"9999999999\"]', ['9999999999'], '9789999999991'], ['partial-repair [\"0-306-40615-2\"]', ['0-306-40615-2'], '9780306406157'], ['control [\"9379774827\"]', ['9379774827'], None], ['control [\"2266685687\"]', ['2266685687'], None], ['control [\"0306406153\"]', ['0306406153'], None], ['control [\"12345\"]', ['12345'], None]]]\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":"80f812254edf16da8f2ebb9a234744a2c0367a041b40a10a14c85831115d5fe4","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    t = s.replace('-', '')\n    if len(t) != 10 or not t.isascii() or not t[:9].isdigit() or not (t[9].isdigit() or t[9] == 'X'):\n        return None\n    if sum((10 - i) * (10 if ch == 'X' else int(ch)) for i, ch in enumerate(t)) % 11:\n        return None\n    body = '978' + t[:9]\n    total = sum(int(ch) * (1 if i % 2 == 0 else 3) for i, ch in enumerate(body))\n    return '978' + t\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"5892872939\"]', ['5892872939'], '9785892872935'], ['regression [\"2399553950\"]', ['2399553950'], '9782399553954'], ['partial-repair [\"9465545449\"]', ['9465545449'], '9789465545448'], ['control [\"5892872930\"]', ['5892872930'], None], ['control [\"2399553951\"]', ['2399553951'], None], ['control [\"9465545440\"]', ['9465545440'], None], ['control [\"8292844660\"]', ['8292844660'], None], ['control [\"9379774827\"]', ['9379774827'], None]], [['regression [\"829284466X\"]', ['829284466X'], '9788292844663'], ['regression [\"9379774826\"]', ['9379774826'], '9789379774828'], ['partial-repair [\"2266685686\"]', ['2266685686'], '9782266685689'], ['partial-repair [\"5900307905\"]', ['5900307905'], '9785900307909'], ['control [\"2266685687\"]', ['2266685687'], None], ['control [\"0306406153\"]', ['0306406153'], None], ['control [\"12345\"]', ['12345'], None], ['control [\"5892872930\"]', ['5892872930'], None]], [['regression [\"2892681790\"]', ['2892681790'], '9782892681796'], ['regression [\"5900307905\"]', ['5900307905'], '9785900307909'], ['partial-repair [\"7113753523\"]', ['7113753523'], '9787113753528'], ['partial-repair [\"1475433131\"]', ['1475433131'], '9781475433135'], ['control [\"9465545440\"]', ['9465545440'], None], ['control [\"8292844660\"]', ['8292844660'], None], ['control [\"9379774827\"]', ['9379774827'], None], ['control [\"2266685687\"]', ['2266685687'], None]], [['regression [\"7113753523\"]', ['7113753523'], '9787113753528'], ['regression [\"1475433131\"]', ['1475433131'], '9781475433135'], ['partial-repair [\"8449627923\"]', ['8449627923'], '9788449627927'], ['partial-repair [\"0436178273\"]', ['0436178273'], '9780436178276'], ['control [\"12345\"]', ['12345'], None], ['control [\"5892872930\"]', ['5892872930'], None], ['control [\"2399553951\"]', ['2399553951'], None], ['control [\"9465545440\"]', ['9465545440'], None]], [['regression [\"8449627923\"]', ['8449627923'], '9788449627927'], ['regression [\"0436178273\"]', ['0436178273'], '9780436178276'], ['partial-repair [\"9999999999\"]', ['9999999999'], '9789999999991'], ['partial-repair [\"0-306-40615-2\"]', ['0-306-40615-2'], '9780306406157'], ['control [\"9379774827\"]', ['9379774827'], None], ['control [\"2266685687\"]', ['2266685687'], None], ['control [\"0306406153\"]', ['0306406153'], None], ['control [\"12345\"]', ['12345'], None]]]\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":"db8deb8d8064cea06914ef236c52ef43960e593b793fc9c58b5aaee33f753632","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    t = s.replace('-', '')\n    if len(t) != 10 or not t.isascii() or not t[:9].isdigit() or not (t[9].isdigit() or t[9] == 'X'):\n        return None\n    if sum((10 - i) * (10 if ch == 'X' else int(ch)) for i, ch in enumerate(t)) % 11:\n        return None\n    body = '978' + t[:9]\n    total = sum(int(ch) * (1 if i % 2 == 0 else 3) for i, ch in enumerate(body))\n    return body + str((10 - total % 10) % 10)\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"5892872939\"]', ['5892872939'], '9785892872935'], ['regression [\"2399553950\"]', ['2399553950'], '9782399553954'], ['partial-repair [\"9465545449\"]', ['9465545449'], '9789465545448'], ['control [\"5892872930\"]', ['5892872930'], None], ['control [\"2399553951\"]', ['2399553951'], None], ['control [\"9465545440\"]', ['9465545440'], None], ['control [\"8292844660\"]', ['8292844660'], None], ['control [\"9379774827\"]', ['9379774827'], None]], [['regression [\"829284466X\"]', ['829284466X'], '9788292844663'], ['regression [\"9379774826\"]', ['9379774826'], '9789379774828'], ['partial-repair [\"2266685686\"]', ['2266685686'], '9782266685689'], ['partial-repair [\"5900307905\"]', ['5900307905'], '9785900307909'], ['control [\"2266685687\"]', ['2266685687'], None], ['control [\"0306406153\"]', ['0306406153'], None], ['control [\"12345\"]', ['12345'], None], ['control [\"5892872930\"]', ['5892872930'], None]], [['regression [\"2892681790\"]', ['2892681790'], '9782892681796'], ['regression [\"5900307905\"]', ['5900307905'], '9785900307909'], ['partial-repair [\"7113753523\"]', ['7113753523'], '9787113753528'], ['partial-repair [\"1475433131\"]', ['1475433131'], '9781475433135'], ['control [\"9465545440\"]', ['9465545440'], None], ['control [\"8292844660\"]', ['8292844660'], None], ['control [\"9379774827\"]', ['9379774827'], None], ['control [\"2266685687\"]', ['2266685687'], None]], [['regression [\"7113753523\"]', ['7113753523'], '9787113753528'], ['regression [\"1475433131\"]', ['1475433131'], '9781475433135'], ['partial-repair [\"8449627923\"]', ['8449627923'], '9788449627927'], ['partial-repair [\"0436178273\"]', ['0436178273'], '9780436178276'], ['control [\"12345\"]', ['12345'], None], ['control [\"5892872930\"]', ['5892872930'], None], ['control [\"2399553951\"]', ['2399553951'], None], ['control [\"9465545440\"]', ['9465545440'], None]], [['regression [\"8449627923\"]', ['8449627923'], '9788449627927'], ['regression [\"0436178273\"]', ['0436178273'], '9780436178276'], ['partial-repair [\"9999999999\"]', ['9999999999'], '9789999999991'], ['partial-repair [\"0-306-40615-2\"]', ['0-306-40615-2'], '9780306406157'], ['control [\"9379774827\"]', ['9379774827'], None], ['control [\"2266685687\"]', ['2266685687'], None], ['control [\"0306406153\"]', ['0306406153'], None], ['control [\"12345\"]', ['12345'], None]]]\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-isbn10-to-13-stale-check-digit","generated_at":"2026-09-29T14:48:38.514119+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Library and retail systems migrate legacy ISBN-10 records to 13-digit EAN identifiers.","repair":"Discard the ISBN-10 check character, prefix 978, and compute a new mod-10 check digit.","root_cause":"The body copies all ten ISBN-10 characters and drops the new computation.","sha256":"16f0bc60a81ee735e9a8593835d938c93977368058004a339cc249f9650f9d45","title":"ISBN-13 conversion keeps the ISBN-10 check character · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":39.953,"exit_code":1,"observations":[{"actual":"9785892872936","check":"regression [\"5892872939\"]","expected":"9785892872935","passed":false},{"actual":"9782399553954","check":"regression [\"2399553950\"]","expected":"9782399553954","passed":true},{"actual":"9789465545449","check":"partial-repair [\"9465545449\"]","expected":"9789465545448","passed":false},{"actual":null,"check":"control [\"5892872930\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"2399553951\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"9465545440\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"8292844660\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"9379774827\"]","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"5892872939\\\"]\", \"actual\": \"9785892872936\", \"expected\": \"9785892872935\", \"passed\": false}, {\"check\": \"regression [\\\"2399553950\\\"]\", \"actual\": \"9782399553954\", \"expected\": \"9782399553954\", \"passed\": true}, {\"check\": \"partial-repair [\\\"9465545449\\\"]\", \"actual\": \"9789465545449\", \"expected\": \"9789465545448\", \"passed\": false}, {\"check\": \"control [\\\"5892872930\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"2399553951\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"9465545440\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"8292844660\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"9379774827\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.415,"exit_code":1,"observations":[{"actual":"9785892872939","check":"regression [\"5892872939\"]","expected":"9785892872935","passed":false},{"actual":"9782399553950","check":"regression [\"2399553950\"]","expected":"9782399553954","passed":false},{"actual":"9789465545449","check":"partial-repair [\"9465545449\"]","expected":"9789465545448","passed":false},{"actual":null,"check":"control [\"5892872930\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"2399553951\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"9465545440\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"8292844660\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"9379774827\"]","expected":null,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"5892872939\\\"]\", \"actual\": \"9785892872939\", \"expected\": \"9785892872935\", \"passed\": false}, {\"check\": \"regression [\\\"2399553950\\\"]\", \"actual\": \"9782399553950\", \"expected\": \"9782399553954\", \"passed\": false}, {\"check\": \"partial-repair [\\\"9465545449\\\"]\", \"actual\": \"9789465545449\", \"expected\": \"9789465545448\", \"passed\": false}, {\"check\": \"control [\\\"5892872930\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"2399553951\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"9465545440\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"8292844660\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"9379774827\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":38.051,"exit_code":0,"observations":[{"actual":"9785892872935","check":"regression [\"5892872939\"]","expected":"9785892872935","passed":true},{"actual":"9782399553954","check":"regression [\"2399553950\"]","expected":"9782399553954","passed":true},{"actual":"9789465545448","check":"partial-repair [\"9465545449\"]","expected":"9789465545448","passed":true},{"actual":null,"check":"control [\"5892872930\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"2399553951\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"9465545440\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"8292844660\"]","expected":null,"passed":true},{"actual":null,"check":"control [\"9379774827\"]","expected":null,"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"5892872939\\\"]\", \"actual\": \"9785892872935\", \"expected\": \"9785892872935\", \"passed\": true}, {\"check\": \"regression [\\\"2399553950\\\"]\", \"actual\": \"9782399553954\", \"expected\": \"9782399553954\", \"passed\": true}, {\"check\": \"partial-repair [\\\"9465545449\\\"]\", \"actual\": \"9789465545448\", \"expected\": \"9789465545448\", \"passed\": true}, {\"check\": \"control [\\\"5892872930\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"2399553951\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"9465545440\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"8292844660\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}, {\"check\": \"control [\\\"9379774827\\\"]\", \"actual\": null, \"expected\": null, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}