Regex OIB croate (numéro d'identification personnel)
L'OIB a 11 chiffres : 10 chiffres aléatoires, sans information personnelle, et un 11e chiffre de contrôle calculé selon ISO 7064 modulo 11,10 (spécification DG TAXUD). Le format ne porte aucune date ni structure : la regex ne peut donc valider que la longueur et les caractères. La clé s'exprime en code : x = 10, puis pour chaque chiffre d, y = (d + x) % 10 (0 devient 10) et x = 2y % 11 ; la clé vaut 11 − x, ramenée à 0 si 10. Les tentatives réelles relues sont toutes courtes : deux ancrent, une est un détecteur sans ancres de chaîne, et une exige le préfixe « HR » de la forme TVA, ce qui rejette un OIB seul.
/^\d{11}$/passe 22/22 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| validator.js isTaxID (hr-HR) — ancrée et équivalente au motif recommandé ; ne contrôle pas la clé (« 94577403195 » passe) | ^\d{11}$ | 22 / 22 | sûr |
| django-localflavor (HROIBField) — ancrée et équivalente ; la clé est vérifiée dans le code Python, pas dans la regex | ^\d{11}$ | 22 / 22 | sûr |
| piigex (détecteur hr_oib) — lookarounds seulement : « OIB 94577403194 » et « x-94577403194 » passent | (?<!\d)\d{11}(?!\d) | 17 / 22 | sûr |
| Relativity aiR (Croatia VAT ID) — exige le préfixe « HR » de la forme TVA : un OIB seul (« 94577403194 ») est rejeté ; seule la forme avec préfixe passe | \bHR\d{11}\b | 10 / 22 | sûr |
Implémentation
const re = new RegExp("^\\d{11}$", "");
re.test(input);Limites
- Valide seulement la FORME : 11 chiffres. La clé ISO 7064 modulo 11,10 n'est pas vérifiée : « 94577403195 » passe. Utilisez le contrôle de code décrit dans l'introduction.
- Le préfixe « HR » de l'OIB utilisé comme numéro de TVA (« HR94577403194 ») est rejeté : retirez-le avant de valider.
- Le format ne contient aucune structure interne vérifiable par regex ; ce motif ne distingue donc un OIB que d'une chaîne de longueur ou de caractères différents. Aucune vérification d'attribution ; n'utilisez en test que des numéros d'exemple ou synthétiques.