Rexact
Cheatsheet

Regex Hong Kong identity card number (HKID)

An HKID number is written X123456(A): one or two letters, six digits and a check character, a digit or 'A', usually in parentheses (which are not part of the number and only ease computer processing, according to Wikipedia). The check is a modulo 11 on characters weighted 9 to 2 (A to Z are 10 to 35, a one-letter number is preceded by a space). The three patterns read here handle parentheses differently: validator.js also accepts square brackets, the hkid package uppercases the input before its regex, and validid only accepts the bare form. Here's a pattern accepting both usual writings, compared against those attempts.

/^[A-Z]{1,2}[0-9]{6}(?:[0-9A]|\([0-9A]\))$/
passes 24/24 cases

Comparison of existing patterns

Implementation

const re = new RegExp("^[A-Z]{1,2}[0-9]{6}(?:[0-9A]|\\([0-9A]\\))$", "");
re.test(input);

Limits

  • Valide seulement la FORME : ne calcule pas la clé modulo 11. « A123456(4) » a la bonne forme mais une clé fausse et passe ; le calcul se fait dans le code.
  • Source de l'algorithme et du format : secondaire (Wikipédia, bibliothèque Perl, implémentations). Je n'ai pas ouvert de document de l'Immigration Department ; vérifiez sur des numéros réels de votre domaine avant de durcir.
  • N'importe quelle lettre est acceptée en tête, alors que Wikipédia indique qu'aucun numéro à une lettre ne commence par I, O, Q, U ou X en 2023 ; le sens des lettres initiales (période, bureau) n'est pas contrôlé. Majuscules seulement, parenthèses facultatives mais appariées.
  • N'établit pas qu'une carte a été délivrée. Un HKID est une donnée personnelle : n'utilisez que des numéros synthétiques à clé calculée.

Related pages