isPassportNumber.js 3.6 KB

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