{"id":"orcid-validate","version":"1.0.0","description":"Validate a 16-digit ORCID iD or ISNI's ISO 7064 MOD 11-2 check character, accepting bare, grouped or URL forms.","supported_operations":["validate an orcid id","check orcid check digit","validate an isni","is this orcid url valid","orcid checksum validator","verify iso 7064 mod 11-2 identifier","does this isni fall in the orcid coordinated range"],"unsupported_operations":["looking up which researcher or organization an ORCID iD or ISNI actually identifies","validating an ISNI in URL form (only ORCID has a recognized URL wrapper)","case-folding a lowercase check character or a lowercase URL host"],"semantics":["scheme is optional and defaults to 'orcid'. No trimming or case folding anywhere.","Character counting: every length, index and 'character' counts Unicode code points, not UTF-16 code units, so normalized, uri and check_digit never split a surrogate pair.","Accepted raw lengths by scheme: 16 (bare) and 19 (grouped NNNN-NNNN-NNNN-NNNC for orcid, NNNN NNNN NNNN NNNC for isni) for both schemes; 37 (the 18-character literal prefix 'https://orcid.org/' followed by the 19-character grouped form) for scheme orcid only. Any other length is reason wrong_length, checked first.","The 16 digit-slot characters are extracted positionally (skipping separator/prefix positions) regardless of whether those separators are actually correct; normalized (their concatenation) and check_digit (the 16th) are populated whenever the length is recognized for the scheme, regardless of other validity.","invalid_character fires when a separator or the URL prefix is wrong, or when any of the first 15 digit-slot characters is not 0-9, or the 16th is neither 0-9 nor 'X'.","uri is 'https://orcid.org/' + normalized with '-' inserted after characters 4, 8 and 12, populated only for scheme orcid; it is always null for scheme isni.","in_orcid_range is true when the first 15 digit-slot characters are all digits and their value as an integer falls in either ISNI block reserved for ORCID (15000000 to 35000000 inclusive, or 900000000000 to 900100000000 inclusive, the 0009 block issued since 2022), false when digits but outside both blocks, and null when any of the first 15 is not a digit.","Check digit (ISO/IEC 7064 MOD 11-2 over the first 15 digit-slot characters, evaluated only once invalid_character has not fired): running_total = (running_total + digit) * 2 for each digit, then (12 - running_total mod 11) mod 11, shown as 'X' when 10. A mismatch is reason check_digit_mismatch.","valid is true only when length, charset and the check digit all pass, in that order; only one reason is ever returned."],"limits":{"max_value_bytes":38},"pricing":{"status":"unpriced","charge_usd":null},"input_schema":{"type":"object","additionalProperties":false,"required":["value"],"properties":{"value":{"type":"string","minLength":1,"maxLength":38},"scheme":{"type":"string","enum":["orcid","isni"]}}},"output_schema":{"type":"object","additionalProperties":false,"required":["valid","reason","normalized","uri","check_digit","in_orcid_range"],"properties":{"valid":{"type":"boolean"},"reason":{"type":["string","null"],"enum":[null,"wrong_length","invalid_character","check_digit_mismatch"]},"normalized":{"type":["string","null"],"minLength":16,"maxLength":16},"uri":{"type":["string","null"]},"check_digit":{"type":["string","null"],"minLength":1,"maxLength":1},"in_orcid_range":{"type":["boolean","null"]}}},"examples":[{"input":{"value":"0000-0002-1825-0097"},"output":{"valid":true,"reason":null,"normalized":"0000000218250097","uri":"https://orcid.org/0000-0002-1825-0097","check_digit":"7","in_orcid_range":true}},{"input":{"value":"0000 0001 2281 955X","scheme":"isni"},"output":{"valid":true,"reason":null,"normalized":"000000012281955X","uri":null,"check_digit":"X","in_orcid_range":false}}],"execute_url":"/v1/tools/orcid-validate/versions/1.0.0/execute"}