{"abstract":"Almost every ORCID iD is rejected.","category":"Check-digit algorithms","checks":8,"contract":"ORCID identifier check (ISO 7064 MOD 11-2). Input is 16 characters, either plain or as four hyphen-separated groups of four (other hyphen layouts \"malformed\"); fifteen digits then a digit or uppercase X. Fold total = (total + digit) * 2 over the fifteen digits; the check value is (12 - total % 11) % 11 with 10 written X. Return [check character, whether it matches].","contract_signature":"s","evaluation_group":"w2-check_digit_algorithms-orcid-mod11-2","failed_approach":"Doubling both before and after adding the digit applies the weight twice.","family":"w2-check_digit_algorithms-orcid-mod11-2-fold-order","id":"FA-72551","implementations":{"attempt":{"sha256":"c31e7430f71d9e841e0301ecf5343c97086bbdbca588a4a6b738a7a65d0cd1f3","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    if '-' in s and [len(g) for g in s.split('-')] != [4, 4, 4, 4]:\n        return 'malformed'\n    t = s.replace('-', '')\n    if len(t) != 16 or not t.isascii() or not t[:15].isdigit() or not (t[15].isdigit() or t[15] == 'X'):\n        return 'malformed'\n    total = 0\n    for ch in t[:15]:\n        total = (total * 2 + int(ch)) * 2\n    r = (12 - total % 11) % 11\n    check = 'X' if r == 10 else str(r)\n    return [check, check == t[15]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"0000-2284-2705-0317\"]', ['0000-2284-2705-0317'], ['6', False]], ['regression [\"0000-6830-1348-0503\"]', ['0000-6830-1348-0503'], ['5', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed'], ['control [\"0000-5056-4379-1736\"]', ['0000-5056-4379-1736'], ['6', True]]], [['regression [\"0000-4451-8984-5952\"]', ['0000-4451-8984-5952'], ['7', False]], ['regression [\"0000-8150-6101-2864\"]', ['0000-8150-6101-2864'], ['3', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed'], ['control [\"0000-5390-9620-5628\"]', ['0000-5390-9620-5628'], ['4', False]]], [['regression [\"0000-8999-3438-1875\"]', ['0000-8999-3438-1875'], ['0', False]], ['regression [\"0000-6263-5457-6118\"]', ['0000-6263-5457-6118'], ['7', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed'], ['control [\"8604828079008568\"]', ['8604828079008568'], ['1', False]]], [['regression [\"0000-5390-9620-5628\"]', ['0000-5390-9620-5628'], ['4', False]], ['regression [\"0000-4723-8762-7029\"]', ['0000-4723-8762-7029'], ['2', False]], ['partial-repair [\"0000-9095-7746-214X\"]', ['0000-9095-7746-214X'], ['1', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed']], [['regression [\"0000-9861-4470-6996\"]', ['0000-9861-4470-6996'], ['8', False]], ['regression [\"7242310350419377\"]', ['7242310350419377'], ['6', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed'], ['control [\"0000-2284-2705-0317\"]', ['0000-2284-2705-0317'], ['6', False]]]]\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":"fa70c36be5e35714c289cdded46e40185a8ada4ee2b14e87f2c1397fe5f4e3d2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(s):\n    if '-' in s and [len(g) for g in s.split('-')] != [4, 4, 4, 4]:\n        return 'malformed'\n    t = s.replace('-', '')\n    if len(t) != 16 or not t.isascii() or not t[:15].isdigit() or not (t[15].isdigit() or t[15] == 'X'):\n        return 'malformed'\n    total = 0\n    for ch in t[:15]:\n        total = total * 2 + int(ch)\n    r = (12 - total % 11) % 11\n    check = 'X' if r == 10 else str(r)\n    return [check, check == t[15]]\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression [\"0000-2284-2705-0317\"]', ['0000-2284-2705-0317'], ['6', False]], ['regression [\"0000-6830-1348-0503\"]', ['0000-6830-1348-0503'], ['5', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed'], ['control [\"0000-5056-4379-1736\"]', ['0000-5056-4379-1736'], ['6', True]]], [['regression [\"0000-4451-8984-5952\"]', ['0000-4451-8984-5952'], ['7', False]], ['regression [\"0000-8150-6101-2864\"]', ['0000-8150-6101-2864'], ['3', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed'], ['control [\"0000-5390-9620-5628\"]', ['0000-5390-9620-5628'], ['4', False]]], [['regression [\"0000-8999-3438-1875\"]', ['0000-8999-3438-1875'], ['0', False]], ['regression [\"0000-6263-5457-6118\"]', ['0000-6263-5457-6118'], ['7', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed'], ['control [\"8604828079008568\"]', ['8604828079008568'], ['1', False]]], [['regression [\"0000-5390-9620-5628\"]', ['0000-5390-9620-5628'], ['4', False]], ['regression [\"0000-4723-8762-7029\"]', ['0000-4723-8762-7029'], ['2', False]], ['partial-repair [\"0000-9095-7746-214X\"]', ['0000-9095-7746-214X'], ['1', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed']], [['regression [\"0000-9861-4470-6996\"]', ['0000-9861-4470-6996'], ['8', False]], ['regression [\"7242310350419377\"]', ['7242310350419377'], ['6', False]], ['control [\"00000-002-1825-0097\"]', ['00000-002-1825-0097'], 'malformed'], ['control [\"0000-00021825-0097\"]', ['0000-00021825-0097'], 'malformed'], ['control [\"0000-0002-1825-009\"]', ['0000-0002-1825-009'], 'malformed'], ['control [\"000-00002-1825-0097\"]', ['000-00002-1825-0097'], 'malformed'], ['control [\"0000-0002-1694-233x\"]', ['0000-0002-1694-233x'], 'malformed'], ['control [\"0000-2284-2705-0317\"]', ['0000-2284-2705-0317'], ['6', False]]]]\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-orcid-mod11-2-fold-order","generated_at":"2026-09-29T14:48:39.571003+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Research information systems verify ORCID iDs before linking publications to authors.","root_cause":"The recurrence is written total * 2 + digit (ordinary Horner) instead of (total + digit) * 2.","sha256":"e168d766ea7a55aa804bac738c6dc3b35d74332f77d4e52e43d440f455636384","title":"ORCID fold adds the digit after doubling · 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.95,"exit_code":1,"observations":[{"actual":["7",true],"check":"regression [\"0000-2284-2705-0317\"]","expected":["6",false],"passed":false},{"actual":["6",false],"check":"regression [\"0000-6830-1348-0503\"]","expected":["5",false],"passed":false},{"actual":"malformed","check":"control [\"00000-002-1825-0097\"]","expected":"malformed","passed":true},{"actual":"malformed","check":"control [\"0000-00021825-0097\"]","expected":"malformed","passed":true},{"actual":"malformed","check":"control [\"0000-0002-1825-009\"]","expected":"malformed","passed":true},{"actual":"malformed","check":"control [\"000-00002-1825-0097\"]","expected":"malformed","passed":true},{"actual":"malformed","check":"control [\"0000-0002-1694-233x\"]","expected":"malformed","passed":true},{"actual":["0",false],"check":"control [\"0000-5056-4379-1736\"]","expected":["6",true],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"0000-2284-2705-0317\\\"]\", \"actual\": [\"7\", true], \"expected\": [\"6\", false], \"passed\": false}, {\"check\": \"regression [\\\"0000-6830-1348-0503\\\"]\", \"actual\": [\"6\", false], \"expected\": [\"5\", false], \"passed\": false}, {\"check\": \"control [\\\"00000-002-1825-0097\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"0000-00021825-0097\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"0000-0002-1825-009\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"000-00002-1825-0097\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"0000-0002-1694-233x\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"0000-5056-4379-1736\\\"]\", \"actual\": [\"0\", false], \"expected\": [\"6\", true], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":38.131,"exit_code":1,"observations":[{"actual":["9",false],"check":"regression [\"0000-2284-2705-0317\"]","expected":["6",false],"passed":false},{"actual":["3",true],"check":"regression [\"0000-6830-1348-0503\"]","expected":["5",false],"passed":false},{"actual":"malformed","check":"control [\"00000-002-1825-0097\"]","expected":"malformed","passed":true},{"actual":"malformed","check":"control [\"0000-00021825-0097\"]","expected":"malformed","passed":true},{"actual":"malformed","check":"control [\"0000-0002-1825-009\"]","expected":"malformed","passed":true},{"actual":"malformed","check":"control [\"000-00002-1825-0097\"]","expected":"malformed","passed":true},{"actual":"malformed","check":"control [\"0000-0002-1694-233x\"]","expected":"malformed","passed":true},{"actual":["9",false],"check":"control [\"0000-5056-4379-1736\"]","expected":["6",true],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression [\\\"0000-2284-2705-0317\\\"]\", \"actual\": [\"9\", false], \"expected\": [\"6\", false], \"passed\": false}, {\"check\": \"regression [\\\"0000-6830-1348-0503\\\"]\", \"actual\": [\"3\", true], \"expected\": [\"5\", false], \"passed\": false}, {\"check\": \"control [\\\"00000-002-1825-0097\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"0000-00021825-0097\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"0000-0002-1825-009\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"000-00002-1825-0097\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"0000-0002-1694-233x\\\"]\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control [\\\"0000-5056-4379-1736\\\"]\", \"actual\": [\"9\", false], \"expected\": [\"6\", true], \"passed\": false}], \"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."}}