isPassportNumber.js 3.7 KB

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