feat: implement researcher and publication management with sync functionality
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
import re
|
||||
|
||||
ORCID_REGEX = re.compile(r"^\d{4}-\d{4}-\d{4}-\d{3}[0-9X]$")
|
||||
|
||||
|
||||
def is_valid_orcid(orcid_id: str) -> bool:
|
||||
"""
|
||||
Valida un ORCID ID:
|
||||
- Formato: 0000-0000-0000-0000
|
||||
- Dígito de control según ISO 7064 Mod 11-2
|
||||
"""
|
||||
if not ORCID_REGEX.match(orcid_id):
|
||||
return False
|
||||
|
||||
# Quitar guiones
|
||||
digits = orcid_id.replace("-", "")
|
||||
|
||||
total = 0
|
||||
# Los primeros 15 dígitos
|
||||
for char in digits[:-1]:
|
||||
total = (total + int(char)) * 2
|
||||
|
||||
# Resto
|
||||
remainder = total % 11
|
||||
result = (12 - remainder) % 11
|
||||
check_digit = "X" if result == 10 else str(result)
|
||||
|
||||
return digits[-1] == check_digit
|
||||
Reference in New Issue
Block a user