isPassportNumber.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import assertString from './util/assertString';
  2. /**
  3. * Reference:
  4. * https://en.wikipedia.org/ -- Wikipedia
  5. * https://docs.microsoft.com/en-us/microsoft-365/compliance/eu-passport-number -- EU Passport Number
  6. * https://countrycode.org/ -- Country Codes
  7. */
  8. var passportRegexByCountryCode = {
  9. AM: /^[A-Z]{2}\d{7}$/,
  10. // ARMENIA
  11. AR: /^[A-Z]{3}\d{6}$/,
  12. // ARGENTINA
  13. AT: /^[A-Z]\d{7}$/,
  14. // AUSTRIA
  15. AU: /^[A-Z]\d{7}$/,
  16. // AUSTRALIA
  17. AZ: /^[A-Z]{2,3}\d{7,8}$/,
  18. // AZERBAIJAN
  19. BE: /^[A-Z]{2}\d{6}$/,
  20. // BELGIUM
  21. BG: /^\d{9}$/,
  22. // BULGARIA
  23. BR: /^[A-Z]{2}\d{6}$/,
  24. // BRAZIL
  25. BY: /^[A-Z]{2}\d{7}$/,
  26. // BELARUS
  27. CA: /^[A-Z]{2}\d{6}$/,
  28. // CANADA
  29. CH: /^[A-Z]\d{7}$/,
  30. // SWITZERLAND
  31. CN: /^G\d{8}$|^E(?![IO])[A-Z0-9]\d{7}$/,
  32. // CHINA [G=Ordinary, E=Electronic] followed by 8-digits, or E followed by any UPPERCASE letter (except I and O) followed by 7 digits
  33. CY: /^[A-Z](\d{6}|\d{8})$/,
  34. // CYPRUS
  35. CZ: /^\d{8}$/,
  36. // CZECH REPUBLIC
  37. DE: /^[CFGHJKLMNPRTVWXYZ0-9]{9}$/,
  38. // GERMANY
  39. DK: /^\d{9}$/,
  40. // DENMARK
  41. DZ: /^\d{9}$/,
  42. // ALGERIA
  43. EE: /^([A-Z]\d{7}|[A-Z]{2}\d{7})$/,
  44. // ESTONIA (K followed by 7-digits), e-passports have 2 UPPERCASE followed by 7 digits
  45. ES: /^[A-Z0-9]{2}([A-Z0-9]?)\d{6}$/,
  46. // SPAIN
  47. FI: /^[A-Z]{2}\d{7}$/,
  48. // FINLAND
  49. FR: /^\d{2}[A-Z]{2}\d{5}$/,
  50. // FRANCE
  51. GB: /^\d{9}$/,
  52. // UNITED KINGDOM
  53. GR: /^[A-Z]{2}\d{7}$/,
  54. // GREECE
  55. HR: /^\d{9}$/,
  56. // CROATIA
  57. HU: /^[A-Z]{2}(\d{6}|\d{7})$/,
  58. // HUNGARY
  59. IE: /^[A-Z0-9]{2}\d{7}$/,
  60. // IRELAND
  61. IN: /^[A-Z]{1}-?\d{7}$/,
  62. // INDIA
  63. ID: /^[A-C]\d{7}$/,
  64. // INDONESIA
  65. IR: /^[A-Z]\d{8}$/,
  66. // IRAN
  67. IS: /^(A)\d{7}$/,
  68. // ICELAND
  69. IT: /^[A-Z0-9]{2}\d{7}$/,
  70. // ITALY
  71. JM: /^[Aa]\d{7}$/,
  72. // JAMAICA
  73. JP: /^[A-Z]{2}\d{7}$/,
  74. // JAPAN
  75. KR: /^[MS]\d{8}$/,
  76. // SOUTH KOREA, REPUBLIC OF KOREA, [S=PS Passports, M=PM Passports]
  77. KZ: /^[a-zA-Z]\d{7}$/,
  78. // KAZAKHSTAN
  79. LI: /^[a-zA-Z]\d{5}$/,
  80. // LIECHTENSTEIN
  81. LT: /^[A-Z0-9]{8}$/,
  82. // LITHUANIA
  83. LU: /^[A-Z0-9]{8}$/,
  84. // LUXEMBURG
  85. LV: /^[A-Z0-9]{2}\d{7}$/,
  86. // LATVIA
  87. LY: /^[A-Z0-9]{8}$/,
  88. // LIBYA
  89. MT: /^\d{7}$/,
  90. // MALTA
  91. MZ: /^([A-Z]{2}\d{7})|(\d{2}[A-Z]{2}\d{5})$/,
  92. // MOZAMBIQUE
  93. MY: /^[AHK]\d{8}$/,
  94. // MALAYSIA
  95. MX: /^\d{10,11}$/,
  96. // MEXICO
  97. NL: /^[A-Z]{2}[A-Z0-9]{6}\d$/,
  98. // NETHERLANDS
  99. NZ: /^([Ll]([Aa]|[Dd]|[Ff]|[Hh])|[Ee]([Aa]|[Pp])|[Nn])\d{6}$/,
  100. // NEW ZEALAND
  101. PH: /^([A-Z](\d{6}|\d{7}[A-Z]))|([A-Z]{2}(\d{6}|\d{7}))$/,
  102. // PHILIPPINES
  103. PK: /^[A-Z]{2}\d{7}$/,
  104. // PAKISTAN
  105. PL: /^[A-Z]{2}\d{7}$/,
  106. // POLAND
  107. PT: /^[A-Z]\d{6}$/,
  108. // PORTUGAL
  109. RO: /^\d{8,9}$/,
  110. // ROMANIA
  111. RU: /^\d{9}$/,
  112. // RUSSIAN FEDERATION
  113. SE: /^\d{8}$/,
  114. // SWEDEN
  115. SL: /^(P)[A-Z]\d{7}$/,
  116. // SLOVENIA
  117. SK: /^[0-9A-Z]\d{7}$/,
  118. // SLOVAKIA
  119. TH: /^[A-Z]{1,2}\d{6,7}$/,
  120. // THAILAND
  121. TR: /^[A-Z]\d{8}$/,
  122. // TURKEY
  123. UA: /^[A-Z]{2}\d{6}$/,
  124. // UKRAINE
  125. US: /^\d{9}$/ // UNITED STATES
  126. };
  127. /**
  128. * Check if str is a valid passport number
  129. * relative to provided ISO Country Code.
  130. *
  131. * @param {string} str
  132. * @param {string} countryCode
  133. * @return {boolean}
  134. */
  135. export default function isPassportNumber(str, countryCode) {
  136. assertString(str);
  137. /** Remove All Whitespaces, Convert to UPPERCASE */
  138. var normalizedStr = str.replace(/\s/g, '').toUpperCase();
  139. return countryCode.toUpperCase() in passportRegexByCountryCode && passportRegexByCountryCode[countryCode].test(normalizedStr);
  140. }