validator-string 13.15.36

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +269 -0
  3. package/es/index.js +218 -0
  4. package/es/lib/alpha.js +151 -0
  5. package/es/lib/blacklist.js +5 -0
  6. package/es/lib/contains.js +15 -0
  7. package/es/lib/equals.js +5 -0
  8. package/es/lib/escape.js +5 -0
  9. package/es/lib/isAbaRouting.js +15 -0
  10. package/es/lib/isAfter.js +10 -0
  11. package/es/lib/isAlpha.js +23 -0
  12. package/es/lib/isAlphanumeric.js +23 -0
  13. package/es/lib/isAscii.js +10 -0
  14. package/es/lib/isBIC.js +16 -0
  15. package/es/lib/isBase32.js +15 -0
  16. package/es/lib/isBase58.js +8 -0
  17. package/es/lib/isBase64.js +23 -0
  18. package/es/lib/isBefore.js +10 -0
  19. package/es/lib/isBoolean.js +15 -0
  20. package/es/lib/isBtcAddress.js +7 -0
  21. package/es/lib/isByteLength.js +19 -0
  22. package/es/lib/isCreditCard.js +43 -0
  23. package/es/lib/isCurrency.js +74 -0
  24. package/es/lib/isDataURI.js +31 -0
  25. package/es/lib/isDate.js +93 -0
  26. package/es/lib/isDecimal.js +22 -0
  27. package/es/lib/isDivisibleBy.js +6 -0
  28. package/es/lib/isEAN.js +70 -0
  29. package/es/lib/isEmail.js +165 -0
  30. package/es/lib/isEmpty.js +10 -0
  31. package/es/lib/isEthereumAddress.js +6 -0
  32. package/es/lib/isFQDN.js +67 -0
  33. package/es/lib/isFloat.js +14 -0
  34. package/es/lib/isFullWidth.js +6 -0
  35. package/es/lib/isHSL.js +13 -0
  36. package/es/lib/isHalfWidth.js +6 -0
  37. package/es/lib/isHash.js +21 -0
  38. package/es/lib/isHexColor.js +13 -0
  39. package/es/lib/isHexadecimal.js +6 -0
  40. package/es/lib/isIBAN.js +171 -0
  41. package/es/lib/isIMEI.js +40 -0
  42. package/es/lib/isIP.js +58 -0
  43. package/es/lib/isIPRange.js +41 -0
  44. package/es/lib/isISBN.js +47 -0
  45. package/es/lib/isISIN.js +55 -0
  46. package/es/lib/isISO15924.js +9 -0
  47. package/es/lib/isISO31661Alpha2.js +21 -0
  48. package/es/lib/isISO31661Alpha3.js +20 -0
  49. package/es/lib/isISO31661Numeric.js +8 -0
  50. package/es/lib/isISO4217.js +9 -0
  51. package/es/lib/isISO6346.js +28 -0
  52. package/es/lib/isISO6391.js +6 -0
  53. package/es/lib/isISO8601.js +42 -0
  54. package/es/lib/isISRC.js +8 -0
  55. package/es/lib/isISSN.js +19 -0
  56. package/es/lib/isIdentityCard.js +407 -0
  57. package/es/lib/isIn.js +23 -0
  58. package/es/lib/isInt.js +19 -0
  59. package/es/lib/isJSON.js +26 -0
  60. package/es/lib/isJWT.js +15 -0
  61. package/es/lib/isLatLong.js +21 -0
  62. package/es/lib/isLength.js +27 -0
  63. package/es/lib/isLicensePlate.js +58 -0
  64. package/es/lib/isLocale.js +107 -0
  65. package/es/lib/isLowercase.js +5 -0
  66. package/es/lib/isLuhnNumber.js +25 -0
  67. package/es/lib/isMACAddress.js +36 -0
  68. package/es/lib/isMD5.js +6 -0
  69. package/es/lib/isMagnetURI.js +9 -0
  70. package/es/lib/isMailtoURI.js +75 -0
  71. package/es/lib/isMimeType.js +40 -0
  72. package/es/lib/isMobilePhone.js +212 -0
  73. package/es/lib/isMongoId.js +6 -0
  74. package/es/lib/isMultibyte.js +10 -0
  75. package/es/lib/isNumeric.js +10 -0
  76. package/es/lib/isOctal.js +6 -0
  77. package/es/lib/isPassportNumber.js +145 -0
  78. package/es/lib/isPort.js +8 -0
  79. package/es/lib/isPostalCode.js +100 -0
  80. package/es/lib/isRFC3339.js +21 -0
  81. package/es/lib/isRgbColor.js +34 -0
  82. package/es/lib/isSemVer.js +14 -0
  83. package/es/lib/isSlug.js +6 -0
  84. package/es/lib/isStrongPassword.js +90 -0
  85. package/es/lib/isSurrogatePair.js +6 -0
  86. package/es/lib/isTaxID.js +1407 -0
  87. package/es/lib/isTime.js +22 -0
  88. package/es/lib/isULID.js +5 -0
  89. package/es/lib/isURL.js +241 -0
  90. package/es/lib/isUUID.js +23 -0
  91. package/es/lib/isUppercase.js +5 -0
  92. package/es/lib/isVAT.js +264 -0
  93. package/es/lib/isVariableWidth.js +7 -0
  94. package/es/lib/isWhitelisted.js +10 -0
  95. package/es/lib/ltrim.js +7 -0
  96. package/es/lib/matches.js +8 -0
  97. package/es/lib/normalizeEmail.js +131 -0
  98. package/es/lib/rtrim.js +15 -0
  99. package/es/lib/stripLow.js +7 -0
  100. package/es/lib/toBoolean.js +8 -0
  101. package/es/lib/toDate.js +6 -0
  102. package/es/lib/toFloat.js +5 -0
  103. package/es/lib/toInt.js +5 -0
  104. package/es/lib/trim.js +5 -0
  105. package/es/lib/unescape.js +8 -0
  106. package/es/lib/util/algorithms.js +79 -0
  107. package/es/lib/util/assertString.js +4 -0
  108. package/es/lib/util/checkHost.js +12 -0
  109. package/es/lib/util/includesArray.js +6 -0
  110. package/es/lib/util/includesString.js +4 -0
  111. package/es/lib/util/merge.js +14 -0
  112. package/es/lib/util/multilineRegex.js +12 -0
  113. package/es/lib/util/nullUndefinedCheck.js +3 -0
  114. package/es/lib/util/toString.js +13 -0
  115. package/es/lib/util/typeOf.js +10 -0
  116. package/es/lib/whitelist.js +5 -0
  117. package/index.js +229 -0
  118. package/lib/alpha.js +157 -0
  119. package/lib/blacklist.js +14 -0
  120. package/lib/contains.js +24 -0
  121. package/lib/equals.js +14 -0
  122. package/lib/escape.js +14 -0
  123. package/lib/isAbaRouting.js +23 -0
  124. package/lib/isAfter.js +19 -0
  125. package/lib/isAlpha.js +31 -0
  126. package/lib/isAlphanumeric.js +31 -0
  127. package/lib/isAscii.js +18 -0
  128. package/lib/isBIC.js +24 -0
  129. package/lib/isBase32.js +24 -0
  130. package/lib/isBase58.js +16 -0
  131. package/lib/isBase64.js +32 -0
  132. package/lib/isBefore.js +19 -0
  133. package/lib/isBoolean.js +24 -0
  134. package/lib/isBtcAddress.js +16 -0
  135. package/lib/isByteLength.js +27 -0
  136. package/lib/isCreditCard.js +52 -0
  137. package/lib/isCurrency.js +83 -0
  138. package/lib/isDataURI.js +40 -0
  139. package/lib/isDate.js +102 -0
  140. package/lib/isDecimal.js +31 -0
  141. package/lib/isDivisibleBy.js +15 -0
  142. package/lib/isEAN.js +78 -0
  143. package/lib/isEmail.js +174 -0
  144. package/lib/isEmpty.js +19 -0
  145. package/lib/isEthereumAddress.js +15 -0
  146. package/lib/isFQDN.js +76 -0
  147. package/lib/isFloat.js +22 -0
  148. package/lib/isFullWidth.js +14 -0
  149. package/lib/isHSL.js +22 -0
  150. package/lib/isHalfWidth.js +14 -0
  151. package/lib/isHash.js +30 -0
  152. package/lib/isHexColor.js +22 -0
  153. package/lib/isHexadecimal.js +15 -0
  154. package/lib/isIBAN.js +178 -0
  155. package/lib/isIMEI.js +49 -0
  156. package/lib/isIP.js +67 -0
  157. package/lib/isIPRange.js +50 -0
  158. package/lib/isISBN.js +56 -0
  159. package/lib/isISIN.js +64 -0
  160. package/lib/isISO15924.js +16 -0
  161. package/lib/isISO31661Alpha2.js +28 -0
  162. package/lib/isISO31661Alpha3.js +28 -0
  163. package/lib/isISO31661Numeric.js +16 -0
  164. package/lib/isISO4217.js +16 -0
  165. package/lib/isISO6346.js +35 -0
  166. package/lib/isISO6391.js +15 -0
  167. package/lib/isISO8601.js +50 -0
  168. package/lib/isISRC.js +16 -0
  169. package/lib/isISSN.js +28 -0
  170. package/lib/isIdentityCard.js +416 -0
  171. package/lib/isIn.js +32 -0
  172. package/lib/isInt.js +28 -0
  173. package/lib/isJSON.js +35 -0
  174. package/lib/isJWT.js +24 -0
  175. package/lib/isLatLong.js +30 -0
  176. package/lib/isLength.js +35 -0
  177. package/lib/isLicensePlate.js +67 -0
  178. package/lib/isLocale.js +115 -0
  179. package/lib/isLowercase.js +14 -0
  180. package/lib/isLuhnNumber.js +34 -0
  181. package/lib/isMACAddress.js +45 -0
  182. package/lib/isMD5.js +15 -0
  183. package/lib/isMagnetURI.js +18 -0
  184. package/lib/isMailtoURI.js +84 -0
  185. package/lib/isMimeType.js +48 -0
  186. package/lib/isMobilePhone.js +219 -0
  187. package/lib/isMongoId.js +15 -0
  188. package/lib/isMultibyte.js +18 -0
  189. package/lib/isNumeric.js +19 -0
  190. package/lib/isOctal.js +15 -0
  191. package/lib/isPassportNumber.js +152 -0
  192. package/lib/isPort.js +17 -0
  193. package/lib/isPostalCode.js +107 -0
  194. package/lib/isRFC3339.js +29 -0
  195. package/lib/isRgbColor.js +42 -0
  196. package/lib/isSemVer.js +22 -0
  197. package/lib/isSlug.js +15 -0
  198. package/lib/isStrongPassword.js +99 -0
  199. package/lib/isSurrogatePair.js +15 -0
  200. package/lib/isTaxID.js +1417 -0
  201. package/lib/isTime.js +31 -0
  202. package/lib/isULID.js +14 -0
  203. package/lib/isURL.js +249 -0
  204. package/lib/isUUID.js +32 -0
  205. package/lib/isUppercase.js +14 -0
  206. package/lib/isVAT.js +274 -0
  207. package/lib/isVariableWidth.js +16 -0
  208. package/lib/isWhitelisted.js +19 -0
  209. package/lib/ltrim.js +16 -0
  210. package/lib/matches.js +17 -0
  211. package/lib/normalizeEmail.js +140 -0
  212. package/lib/rtrim.js +24 -0
  213. package/lib/stripLow.js +16 -0
  214. package/lib/toBoolean.js +17 -0
  215. package/lib/toDate.js +15 -0
  216. package/lib/toFloat.js +14 -0
  217. package/lib/toInt.js +14 -0
  218. package/lib/trim.js +14 -0
  219. package/lib/unescape.js +17 -0
  220. package/lib/util/algorithms.js +88 -0
  221. package/lib/util/assertString.js +12 -0
  222. package/lib/util/checkHost.js +20 -0
  223. package/lib/util/includesArray.js +14 -0
  224. package/lib/util/includesString.js +12 -0
  225. package/lib/util/merge.js +22 -0
  226. package/lib/util/multilineRegex.js +20 -0
  227. package/lib/util/nullUndefinedCheck.js +11 -0
  228. package/lib/util/toString.js +21 -0
  229. package/lib/util/typeOf.js +18 -0
  230. package/lib/whitelist.js +14 -0
  231. package/package.json +83 -0
  232. package/validator.js +5808 -0
  233. package/validator.min.js +23 -0
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isISO31661Alpha3;
7
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ // from https://en.wikipedia.org/wiki/ISO_3166-1_alpha-3
10
+ var validISO31661Alpha3CountriesCodes = new Set(['AFG', 'ALA', 'ALB', 'DZA', 'ASM', 'AND', 'AGO', 'AIA', 'ATA', 'ATG', 'ARG', 'ARM', 'ABW', 'AUS', 'AUT', 'AZE', 'BHS', 'BHR', 'BGD', 'BRB', 'BLR', 'BEL', 'BLZ', 'BEN', 'BMU', 'BTN', 'BOL', 'BES', 'BIH', 'BWA', 'BVT', 'BRA', 'IOT', 'BRN', 'BGR', 'BFA', 'BDI', 'KHM', 'CMR', 'CAN', 'CPV', 'CYM', 'CAF', 'TCD', 'CHL', 'CHN', 'CXR', 'CCK', 'COL', 'COM', 'COG', 'COD', 'COK', 'CRI', 'CIV', 'HRV', 'CUB', 'CUW', 'CYP', 'CZE', 'DNK', 'DJI', 'DMA', 'DOM', 'ECU', 'EGY', 'SLV', 'GNQ', 'ERI', 'EST', 'ETH', 'FLK', 'FRO', 'FJI', 'FIN', 'FRA', 'GUF', 'PYF', 'ATF', 'GAB', 'GMB', 'GEO', 'DEU', 'GHA', 'GIB', 'GRC', 'GRL', 'GRD', 'GLP', 'GUM', 'GTM', 'GGY', 'GIN', 'GNB', 'GUY', 'HTI', 'HMD', 'VAT', 'HND', 'HKG', 'HUN', 'ISL', 'IND', 'IDN', 'IRN', 'IRQ', 'IRL', 'IMN', 'ISR', 'ITA', 'JAM', 'JPN', 'JEY', 'JOR', 'KAZ', 'KEN', 'KIR', 'PRK', 'KOR', 'KWT', 'KGZ', 'LAO', 'LVA', 'LBN', 'LSO', 'LBR', 'LBY', 'LIE', 'LTU', 'LUX', 'MAC', 'MKD', 'MDG', 'MWI', 'MYS', 'MDV', 'MLI', 'MLT', 'MHL', 'MTQ', 'MRT', 'MUS', 'MYT', 'MEX', 'FSM', 'MDA', 'MCO', 'MNG', 'MNE', 'MSR', 'MAR', 'MOZ', 'MMR', 'NAM', 'NRU', 'NPL', 'NLD', 'NCL', 'NZL', 'NIC', 'NER', 'NGA', 'NIU', 'NFK', 'MNP', 'NOR', 'OMN', 'PAK', 'PLW', 'PSE', 'PAN', 'PNG', 'PRY', 'PER', 'PHL', 'PCN', 'POL', 'PRT', 'PRI', 'QAT', 'REU', 'ROU', 'RUS', 'RWA', 'BLM', 'SHN', 'KNA', 'LCA', 'MAF', 'SPM', 'VCT', 'WSM', 'SMR', 'STP', 'SAU', 'SEN', 'SRB', 'SYC', 'SLE', 'SGP', 'SXM', 'SVK', 'SVN', 'SLB', 'SOM', 'ZAF', 'SGS', 'SSD', 'ESP', 'LKA', 'SDN', 'SUR', 'SJM', 'SWZ', 'SWE', 'CHE', 'SYR', 'TWN', 'TJK', 'TZA', 'THA', 'TLS', 'TGO', 'TKL', 'TON', 'TTO', 'TUN', 'TUR', 'TKM', 'TCA', 'TUV', 'UGA', 'UKR', 'ARE', 'GBR', 'USA', 'UMI', 'URY', 'UZB', 'VUT', 'VEN', 'VNM', 'VGB', 'VIR', 'WLF', 'ESH', 'YEM', 'ZMB', 'ZWE']);
11
+ var alpha3CountryCode = /^[a-zA-Z]{3}$/;
12
+ function isISO31661Alpha3(str) {
13
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
14
+ (0, _assertString.default)(str);
15
+ var userAssignedCodes = options.userAssignedCodes;
16
+ var validUserAssignedCodes = (userAssignedCodes || []).reduce(function (accumulator, userAssignedCode) {
17
+ if (alpha3CountryCode.test(userAssignedCode)) {
18
+ accumulator.push(userAssignedCode.toUpperCase());
19
+ }
20
+ return accumulator;
21
+ }, []);
22
+ if (validUserAssignedCodes.includes(str.toUpperCase())) {
23
+ return true;
24
+ }
25
+ return validISO31661Alpha3CountriesCodes.has(str.toUpperCase());
26
+ }
27
+ module.exports = exports.default;
28
+ module.exports.default = exports.default;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isISO31661Numeric;
7
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ // from https://en.wikipedia.org/wiki/ISO_3166-1_numeric
10
+ var validISO31661NumericCountriesCodes = new Set(['004', '008', '010', '012', '016', '020', '024', '028', '031', '032', '036', '040', '044', '048', '050', '051', '052', '056', '060', '064', '068', '070', '072', '074', '076', '084', '086', '090', '092', '096', '100', '104', '108', '112', '116', '120', '124', '132', '136', '140', '144', '148', '152', '156', '158', '162', '166', '170', '174', '175', '178', '180', '184', '188', '191', '192', '196', '203', '204', '208', '212', '214', '218', '222', '226', '231', '232', '233', '234', '238', '239', '242', '246', '248', '250', '254', '258', '260', '262', '266', '268', '270', '275', '276', '288', '292', '296', '300', '304', '308', '312', '316', '320', '324', '328', '332', '334', '336', '340', '344', '348', '352', '356', '360', '364', '368', '372', '376', '380', '384', '388', '392', '398', '400', '404', '408', '410', '414', '417', '418', '422', '426', '428', '430', '434', '438', '440', '442', '446', '450', '454', '458', '462', '466', '470', '474', '478', '480', '484', '492', '496', '498', '499', '500', '504', '508', '512', '516', '520', '524', '528', '531', '533', '534', '535', '540', '548', '554', '558', '562', '566', '570', '574', '578', '580', '581', '583', '584', '585', '586', '591', '598', '600', '604', '608', '612', '616', '620', '624', '626', '630', '634', '638', '642', '643', '646', '652', '654', '659', '660', '662', '663', '666', '670', '674', '678', '682', '686', '688', '690', '694', '702', '703', '704', '705', '706', '710', '716', '724', '728', '729', '732', '740', '744', '748', '752', '756', '760', '762', '764', '768', '772', '776', '780', '784', '788', '792', '795', '796', '798', '800', '804', '807', '818', '826', '831', '832', '833', '834', '840', '850', '854', '858', '860', '862', '876', '882', '887', '894']);
11
+ function isISO31661Numeric(str) {
12
+ (0, _assertString.default)(str);
13
+ return validISO31661NumericCountriesCodes.has(str);
14
+ }
15
+ module.exports = exports.default;
16
+ module.exports.default = exports.default;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.CurrencyCodes = void 0;
7
+ exports.default = isISO4217;
8
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ // from https://en.wikipedia.org/wiki/ISO_4217
11
+ var validISO4217CurrencyCodes = new Set(['AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD', 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BOV', 'BRL', 'BSD', 'BTN', 'BWP', 'BYN', 'BZD', 'CAD', 'CDF', 'CHE', 'CHF', 'CHW', 'CLF', 'CLP', 'CNY', 'COP', 'COU', 'CRC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB', 'EUR', 'FJD', 'FKP', 'GBP', 'GEL', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ', 'GYD', 'HKD', 'HNL', 'HTG', 'HUF', 'IDR', 'ILS', 'INR', 'IQD', 'IRR', 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KMF', 'KPW', 'KRW', 'KWD', 'KYD', 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK', 'MNT', 'MOP', 'MRU', 'MUR', 'MVR', 'MWK', 'MXN', 'MXV', 'MYR', 'MZN', 'NAD', 'NGN', 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG', 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP', 'SLE', 'SLL', 'SOS', 'SRD', 'SSP', 'STN', 'SVC', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND', 'TOP', 'TRY', 'TTD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'USN', 'UYI', 'UYU', 'UYW', 'UZS', 'VED', 'VES', 'VND', 'VUV', 'WST', 'XAF', 'XAG', 'XAU', 'XBA', 'XBB', 'XBC', 'XBD', 'XCD', 'XDR', 'XOF', 'XPD', 'XPF', 'XPT', 'XSU', 'XTS', 'XUA', 'XXX', 'YER', 'ZAR', 'ZMW', 'ZWL']);
12
+ function isISO4217(str) {
13
+ (0, _assertString.default)(str);
14
+ return validISO4217CurrencyCodes.has(str.toUpperCase());
15
+ }
16
+ var CurrencyCodes = exports.CurrencyCodes = validISO4217CurrencyCodes;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.isFreightContainerID = void 0;
7
+ exports.isISO6346 = isISO6346;
8
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ // https://en.wikipedia.org/wiki/ISO_6346
11
+ // according to ISO6346 standard, checksum digit is mandatory for freight container but recommended
12
+ // for other container types (J and Z)
13
+ var isISO6346Str = /^[A-Z]{3}(U[0-9]{7})|([J,Z][0-9]{6,7})$/;
14
+ var isDigit = /^[0-9]$/;
15
+ function isISO6346(str) {
16
+ (0, _assertString.default)(str);
17
+ str = str.toUpperCase();
18
+ if (!isISO6346Str.test(str)) return false;
19
+ if (str.length === 11) {
20
+ var sum = 0;
21
+ for (var i = 0; i < str.length - 1; i++) {
22
+ if (!isDigit.test(str[i])) {
23
+ var convertedCode = void 0;
24
+ var letterCode = str.charCodeAt(i) - 55;
25
+ if (letterCode < 11) convertedCode = letterCode;else if (letterCode >= 11 && letterCode <= 20) convertedCode = 12 + letterCode % 11;else if (letterCode >= 21 && letterCode <= 30) convertedCode = 23 + letterCode % 21;else convertedCode = 34 + letterCode % 31;
26
+ sum += convertedCode * Math.pow(2, i);
27
+ } else sum += str[i] * Math.pow(2, i);
28
+ }
29
+ var checkSumDigit = sum % 11;
30
+ if (checkSumDigit === 10) checkSumDigit = 0;
31
+ return Number(str[str.length - 1]) === checkSumDigit;
32
+ }
33
+ return true;
34
+ }
35
+ var isFreightContainerID = exports.isFreightContainerID = isISO6346;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isISO6391;
7
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ var isISO6391Set = new Set(['aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az', 'az', 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce', 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee', 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr', 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr', 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'io', 'is', 'it', 'iu', 'ja', 'jv', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn', 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln', 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mr', 'ms', 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv', 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu', 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'si', 'sk', 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta', 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw', 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi', 'yo', 'za', 'zh', 'zu']);
10
+ function isISO6391(str) {
11
+ (0, _assertString.default)(str);
12
+ return isISO6391Set.has(str);
13
+ }
14
+ module.exports = exports.default;
15
+ module.exports.default = exports.default;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isISO8601;
7
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ /* eslint-disable max-len */
10
+ // from http://goo.gl/0ejHHW
11
+ var iso8601 = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
12
+ // same as above, except with a strict 'T' separator between date and time
13
+ var iso8601StrictSeparator = /^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-3])(-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T]((([01]\d|2[0-3])((:?)[0-5]\d)?|24:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$/;
14
+ /* eslint-enable max-len */
15
+ var isValidDate = function isValidDate(str) {
16
+ // str must have passed the ISO8601 check
17
+ // this check is meant to catch invalid dates
18
+ // like 2009-02-31
19
+ // first check for ordinal dates
20
+ var ordinalMatch = str.match(/^(\d{4})-?(\d{3})([ T]{1}\.*|$)/);
21
+ if (ordinalMatch) {
22
+ var oYear = Number(ordinalMatch[1]);
23
+ var oDay = Number(ordinalMatch[2]);
24
+ // if is leap year
25
+ if (oYear % 4 === 0 && oYear % 100 !== 0 || oYear % 400 === 0) return oDay <= 366;
26
+ return oDay <= 365;
27
+ }
28
+ var match = str.match(/(\d{4})-?(\d{0,2})-?(\d*)/).map(Number);
29
+ var year = match[1];
30
+ var month = match[2];
31
+ var day = match[3];
32
+ var monthString = month ? "0".concat(month).slice(-2) : month;
33
+ var dayString = day ? "0".concat(day).slice(-2) : day;
34
+
35
+ // create a date object and compare
36
+ var d = new Date("".concat(year, "-").concat(monthString || '01', "-").concat(dayString || '01'));
37
+ if (month && day) {
38
+ return d.getUTCFullYear() === year && d.getUTCMonth() + 1 === month && d.getUTCDate() === day;
39
+ }
40
+ return true;
41
+ };
42
+ function isISO8601(str) {
43
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
44
+ (0, _assertString.default)(str);
45
+ var check = options.strictSeparator ? iso8601StrictSeparator.test(str) : iso8601.test(str);
46
+ if (check && options.strict) return isValidDate(str);
47
+ return check;
48
+ }
49
+ module.exports = exports.default;
50
+ module.exports.default = exports.default;
package/lib/isISRC.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isISRC;
7
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ // see http://isrc.ifpi.org/en/isrc-standard/code-syntax
10
+ var isrc = /^[A-Z]{2}[0-9A-Z]{3}\d{2}\d{5}$/;
11
+ function isISRC(str) {
12
+ (0, _assertString.default)(str);
13
+ return isrc.test(str);
14
+ }
15
+ module.exports = exports.default;
16
+ module.exports.default = exports.default;
package/lib/isISSN.js ADDED
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isISSN;
7
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ var issn = '^\\d{4}-?\\d{3}[\\dX]$';
10
+ function isISSN(str) {
11
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
12
+ (0, _assertString.default)(str);
13
+ var testIssn = issn;
14
+ testIssn = options.require_hyphen ? testIssn.replace('?', '') : testIssn;
15
+ testIssn = options.case_sensitive ? new RegExp(testIssn) : new RegExp(testIssn, 'i');
16
+ if (!testIssn.test(str)) {
17
+ return false;
18
+ }
19
+ var digits = str.replace('-', '').toUpperCase();
20
+ var checksum = 0;
21
+ for (var i = 0; i < digits.length; i++) {
22
+ var digit = digits[i];
23
+ checksum += (digit === 'X' ? 10 : +digit) * (8 - i);
24
+ }
25
+ return checksum % 11 === 0;
26
+ }
27
+ module.exports = exports.default;
28
+ module.exports.default = exports.default;
@@ -0,0 +1,416 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = isIdentityCard;
7
+ var _assertString = _interopRequireDefault(require("./util/assertString"));
8
+ var _includesArray = _interopRequireDefault(require("./util/includesArray"));
9
+ var _isInt = _interopRequireDefault(require("./isInt"));
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ var validators = {
12
+ PL: function PL(str) {
13
+ (0, _assertString.default)(str);
14
+ var weightOfDigits = {
15
+ 1: 1,
16
+ 2: 3,
17
+ 3: 7,
18
+ 4: 9,
19
+ 5: 1,
20
+ 6: 3,
21
+ 7: 7,
22
+ 8: 9,
23
+ 9: 1,
24
+ 10: 3,
25
+ 11: 0
26
+ };
27
+ if (str != null && str.length === 11 && (0, _isInt.default)(str, {
28
+ allow_leading_zeroes: true
29
+ })) {
30
+ var digits = str.split('').slice(0, -1);
31
+ var sum = digits.reduce(function (acc, digit, index) {
32
+ return acc + Number(digit) * weightOfDigits[index + 1];
33
+ }, 0);
34
+ var modulo = sum % 10;
35
+ var lastDigit = Number(str.charAt(str.length - 1));
36
+ if (modulo === 0 && lastDigit === 0 || lastDigit === 10 - modulo) {
37
+ return true;
38
+ }
39
+ }
40
+ return false;
41
+ },
42
+ ES: function ES(str) {
43
+ (0, _assertString.default)(str);
44
+ var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/;
45
+ var charsValue = {
46
+ X: 0,
47
+ Y: 1,
48
+ Z: 2
49
+ };
50
+ var controlDigits = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];
51
+
52
+ // sanitize user input
53
+ var sanitized = str.trim().toUpperCase();
54
+
55
+ // validate the data structure
56
+ if (!DNI.test(sanitized)) {
57
+ return false;
58
+ }
59
+
60
+ // validate the control digit
61
+ var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) {
62
+ return charsValue[char];
63
+ });
64
+ return sanitized.endsWith(controlDigits[number % 23]);
65
+ },
66
+ FI: function FI(str) {
67
+ // https://dvv.fi/en/personal-identity-code#:~:text=control%20character%20for%20a-,personal,-identity%20code%20calculated
68
+ (0, _assertString.default)(str);
69
+ if (str.length !== 11) {
70
+ return false;
71
+ }
72
+ if (!str.match(/^\d{6}[\-A\+]\d{3}[0-9ABCDEFHJKLMNPRSTUVWXY]{1}$/)) {
73
+ return false;
74
+ }
75
+ var checkDigits = '0123456789ABCDEFHJKLMNPRSTUVWXY';
76
+ var idAsNumber = parseInt(str.slice(0, 6), 10) * 1000 + parseInt(str.slice(7, 10), 10);
77
+ var remainder = idAsNumber % 31;
78
+ var checkDigit = checkDigits[remainder];
79
+ return checkDigit === str.slice(10, 11);
80
+ },
81
+ IN: function IN(str) {
82
+ var DNI = /^[1-9]\d{3}\s?\d{4}\s?\d{4}$/;
83
+
84
+ // multiplication table
85
+ var d = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 2, 3, 4, 0, 6, 7, 8, 9, 5], [2, 3, 4, 0, 1, 7, 8, 9, 5, 6], [3, 4, 0, 1, 2, 8, 9, 5, 6, 7], [4, 0, 1, 2, 3, 9, 5, 6, 7, 8], [5, 9, 8, 7, 6, 0, 4, 3, 2, 1], [6, 5, 9, 8, 7, 1, 0, 4, 3, 2], [7, 6, 5, 9, 8, 2, 1, 0, 4, 3], [8, 7, 6, 5, 9, 3, 2, 1, 0, 4], [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]];
86
+
87
+ // permutation table
88
+ var p = [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [1, 5, 7, 6, 2, 8, 3, 0, 9, 4], [5, 8, 0, 3, 7, 9, 6, 1, 4, 2], [8, 9, 1, 6, 0, 4, 3, 5, 2, 7], [9, 4, 5, 3, 1, 2, 6, 8, 7, 0], [4, 2, 8, 6, 5, 7, 3, 9, 0, 1], [2, 7, 9, 3, 8, 0, 6, 4, 1, 5], [7, 0, 4, 6, 9, 1, 3, 2, 5, 8]];
89
+
90
+ // sanitize user input
91
+ var sanitized = str.trim();
92
+
93
+ // validate the data structure
94
+ if (!DNI.test(sanitized)) {
95
+ return false;
96
+ }
97
+ var c = 0;
98
+ var invertedArray = sanitized.replace(/\s/g, '').split('').map(Number).reverse();
99
+ invertedArray.forEach(function (val, i) {
100
+ c = d[c][p[i % 8][val]];
101
+ });
102
+ return c === 0;
103
+ },
104
+ IR: function IR(str) {
105
+ if (!str.match(/^\d{10}$/)) return false;
106
+ str = "0000".concat(str).slice(str.length - 6);
107
+ if (parseInt(str.slice(3, 9), 10) === 0) return false;
108
+ var lastNumber = parseInt(str.slice(9, 10), 10);
109
+ var sum = 0;
110
+ for (var i = 0; i < 9; i++) {
111
+ sum += parseInt(str.slice(i, i + 1), 10) * (10 - i);
112
+ }
113
+ sum %= 11;
114
+ return sum < 2 && lastNumber === sum || sum >= 2 && lastNumber === 11 - sum;
115
+ },
116
+ IT: function IT(str) {
117
+ if (str.length !== 9) return false;
118
+ if (str === 'CA00000AA') return false; // https://it.wikipedia.org/wiki/Carta_d%27identit%C3%A0_elettronica_italiana
119
+ return str.search(/C[A-Z]\d{5}[A-Z]{2}/i) > -1;
120
+ },
121
+ NO: function NO(str) {
122
+ var sanitized = str.trim();
123
+ if (isNaN(Number(sanitized))) return false;
124
+ if (sanitized.length !== 11) return false;
125
+ if (sanitized === '00000000000') return false;
126
+
127
+ // https://no.wikipedia.org/wiki/F%C3%B8dselsnummer
128
+ var f = sanitized.split('').map(Number);
129
+ var k1 = (11 - (3 * f[0] + 7 * f[1] + 6 * f[2] + 1 * f[3] + 8 * f[4] + 9 * f[5] + 4 * f[6] + 5 * f[7] + 2 * f[8]) % 11) % 11;
130
+ var k2 = (11 - (5 * f[0] + 4 * f[1] + 3 * f[2] + 2 * f[3] + 7 * f[4] + 6 * f[5] + 5 * f[6] + 4 * f[7] + 3 * f[8] + 2 * k1) % 11) % 11;
131
+ if (k1 !== f[9] || k2 !== f[10]) return false;
132
+ return true;
133
+ },
134
+ TH: function TH(str) {
135
+ if (!str.match(/^[1-8]\d{12}$/)) return false;
136
+
137
+ // validate check digit
138
+ var sum = 0;
139
+ for (var i = 0; i < 12; i++) {
140
+ sum += parseInt(str[i], 10) * (13 - i);
141
+ }
142
+ return str[12] === ((11 - sum % 11) % 10).toString();
143
+ },
144
+ LK: function LK(str) {
145
+ var old_nic = /^[1-9]\d{8}[vx]$/i;
146
+ var new_nic = /^[1-9]\d{11}$/i;
147
+ if (str.length === 10 && old_nic.test(str)) return true;else if (str.length === 12 && new_nic.test(str)) return true;
148
+ return false;
149
+ },
150
+ 'he-IL': function heIL(str) {
151
+ var DNI = /^\d{9}$/;
152
+
153
+ // sanitize user input
154
+ var sanitized = str.trim();
155
+
156
+ // validate the data structure
157
+ if (!DNI.test(sanitized)) {
158
+ return false;
159
+ }
160
+ var id = sanitized;
161
+ var sum = 0,
162
+ incNum;
163
+ for (var i = 0; i < id.length; i++) {
164
+ incNum = Number(id[i]) * (i % 2 + 1); // Multiply number by 1 or 2
165
+ sum += incNum > 9 ? incNum - 9 : incNum; // Sum the digits up and add to total
166
+ }
167
+ return sum % 10 === 0;
168
+ },
169
+ 'ar-LY': function arLY(str) {
170
+ // Libya National Identity Number NIN is 12 digits, the first digit is either 1 or 2
171
+ var NIN = /^(1|2)\d{11}$/;
172
+
173
+ // sanitize user input
174
+ var sanitized = str.trim();
175
+ return NIN.test(sanitized);
176
+ },
177
+ 'ar-TN': function arTN(str) {
178
+ var DNI = /^\d{8}$/;
179
+
180
+ // sanitize user input
181
+ var sanitized = str.trim();
182
+ return DNI.test(sanitized);
183
+ },
184
+ 'zh-CN': function zhCN(str) {
185
+ var provincesAndCities = ['11',
186
+ // 北京
187
+ '12',
188
+ // 天津
189
+ '13',
190
+ // 河北
191
+ '14',
192
+ // 山西
193
+ '15',
194
+ // 内蒙古
195
+ '21',
196
+ // 辽宁
197
+ '22',
198
+ // 吉林
199
+ '23',
200
+ // 黑龙江
201
+ '31',
202
+ // 上海
203
+ '32',
204
+ // 江苏
205
+ '33',
206
+ // 浙江
207
+ '34',
208
+ // 安徽
209
+ '35',
210
+ // 福建
211
+ '36',
212
+ // 江西
213
+ '37',
214
+ // 山东
215
+ '41',
216
+ // 河南
217
+ '42',
218
+ // 湖北
219
+ '43',
220
+ // 湖南
221
+ '44',
222
+ // 广东
223
+ '45',
224
+ // 广西
225
+ '46',
226
+ // 海南
227
+ '50',
228
+ // 重庆
229
+ '51',
230
+ // 四川
231
+ '52',
232
+ // 贵州
233
+ '53',
234
+ // 云南
235
+ '54',
236
+ // 西藏
237
+ '61',
238
+ // 陕西
239
+ '62',
240
+ // 甘肃
241
+ '63',
242
+ // 青海
243
+ '64',
244
+ // 宁夏
245
+ '65',
246
+ // 新疆
247
+ '71',
248
+ // 台湾
249
+ '81',
250
+ // 香港
251
+ '82',
252
+ // 澳门
253
+ '91' // 国外
254
+ ];
255
+ var powers = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2'];
256
+ var parityBit = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
257
+ var checkAddressCode = function checkAddressCode(addressCode) {
258
+ return (0, _includesArray.default)(provincesAndCities, addressCode);
259
+ };
260
+ var checkBirthDayCode = function checkBirthDayCode(birDayCode) {
261
+ var yyyy = parseInt(birDayCode.substring(0, 4), 10);
262
+ var mm = parseInt(birDayCode.substring(4, 6), 10);
263
+ var dd = parseInt(birDayCode.substring(6), 10);
264
+ var xdata = new Date(yyyy, mm - 1, dd);
265
+ if (xdata > new Date()) {
266
+ return false;
267
+ // eslint-disable-next-line max-len
268
+ } else if (xdata.getFullYear() === yyyy && xdata.getMonth() === mm - 1 && xdata.getDate() === dd) {
269
+ return true;
270
+ }
271
+ return false;
272
+ };
273
+ var getParityBit = function getParityBit(idCardNo) {
274
+ var id17 = idCardNo.substring(0, 17);
275
+ var power = 0;
276
+ for (var i = 0; i < 17; i++) {
277
+ power += parseInt(id17.charAt(i), 10) * parseInt(powers[i], 10);
278
+ }
279
+ var mod = power % 11;
280
+ return parityBit[mod];
281
+ };
282
+ var checkParityBit = function checkParityBit(idCardNo) {
283
+ return getParityBit(idCardNo) === idCardNo.charAt(17).toUpperCase();
284
+ };
285
+ var check15IdCardNo = function check15IdCardNo(idCardNo) {
286
+ var check = /^[1-9]\d{7}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}$/.test(idCardNo);
287
+ if (!check) return false;
288
+ var addressCode = idCardNo.substring(0, 2);
289
+ check = checkAddressCode(addressCode);
290
+ if (!check) return false;
291
+ var birDayCode = "19".concat(idCardNo.substring(6, 12));
292
+ check = checkBirthDayCode(birDayCode);
293
+ if (!check) return false;
294
+ return true;
295
+ };
296
+ var check18IdCardNo = function check18IdCardNo(idCardNo) {
297
+ var check = /^[1-9]\d{5}[1-9]\d{3}((0[1-9])|(1[0-2]))((0[1-9])|([1-2][0-9])|(3[0-1]))\d{3}(\d|x|X)$/.test(idCardNo);
298
+ if (!check) return false;
299
+ var addressCode = idCardNo.substring(0, 2);
300
+ check = checkAddressCode(addressCode);
301
+ if (!check) return false;
302
+ var birDayCode = idCardNo.substring(6, 14);
303
+ check = checkBirthDayCode(birDayCode);
304
+ if (!check) return false;
305
+ return checkParityBit(idCardNo);
306
+ };
307
+ var checkIdCardNo = function checkIdCardNo(idCardNo) {
308
+ var check = /^\d{15}|(\d{17}(\d|x|X))$/.test(idCardNo);
309
+ if (!check) return false;
310
+ if (idCardNo.length === 15) {
311
+ return check15IdCardNo(idCardNo);
312
+ }
313
+ return check18IdCardNo(idCardNo);
314
+ };
315
+ return checkIdCardNo(str);
316
+ },
317
+ 'zh-HK': function zhHK(str) {
318
+ // sanitize user input
319
+ str = str.trim();
320
+
321
+ // HKID number starts with 1 or 2 letters, followed by 6 digits,
322
+ // then a checksum contained in square / round brackets or nothing
323
+ var regexHKID = /^[A-Z]{1,2}[0-9]{6}((\([0-9A]\))|(\[[0-9A]\])|([0-9A]))$/;
324
+ var regexIsDigit = /^[0-9]$/;
325
+
326
+ // convert the user input to all uppercase and apply regex
327
+ str = str.toUpperCase();
328
+ if (!regexHKID.test(str)) return false;
329
+ str = str.replace(/\[|\]|\(|\)/g, '');
330
+ if (str.length === 8) str = "3".concat(str);
331
+ var checkSumVal = 0;
332
+ for (var i = 0; i <= 7; i++) {
333
+ var convertedChar = void 0;
334
+ if (!regexIsDigit.test(str[i])) convertedChar = (str[i].charCodeAt(0) - 55) % 11;else convertedChar = str[i];
335
+ checkSumVal += convertedChar * (9 - i);
336
+ }
337
+ checkSumVal %= 11;
338
+ var checkSumConverted;
339
+ if (checkSumVal === 0) checkSumConverted = '0';else if (checkSumVal === 1) checkSumConverted = 'A';else checkSumConverted = String(11 - checkSumVal);
340
+ if (checkSumConverted === str[str.length - 1]) return true;
341
+ return false;
342
+ },
343
+ 'zh-TW': function zhTW(str) {
344
+ var ALPHABET_CODES = {
345
+ A: 10,
346
+ B: 11,
347
+ C: 12,
348
+ D: 13,
349
+ E: 14,
350
+ F: 15,
351
+ G: 16,
352
+ H: 17,
353
+ I: 34,
354
+ J: 18,
355
+ K: 19,
356
+ L: 20,
357
+ M: 21,
358
+ N: 22,
359
+ O: 35,
360
+ P: 23,
361
+ Q: 24,
362
+ R: 25,
363
+ S: 26,
364
+ T: 27,
365
+ U: 28,
366
+ V: 29,
367
+ W: 32,
368
+ X: 30,
369
+ Y: 31,
370
+ Z: 33
371
+ };
372
+ var sanitized = str.trim().toUpperCase();
373
+ if (!/^[A-Z][0-9]{9}$/.test(sanitized)) return false;
374
+ return Array.from(sanitized).reduce(function (sum, number, index) {
375
+ if (index === 0) {
376
+ var code = ALPHABET_CODES[number];
377
+ return code % 10 * 9 + Math.floor(code / 10);
378
+ }
379
+ if (index === 9) {
380
+ return (10 - sum % 10 - Number(number)) % 10 === 0;
381
+ }
382
+ return sum + Number(number) * (9 - index);
383
+ }, 0);
384
+ },
385
+ PK: function PK(str) {
386
+ // Pakistani National Identity Number CNIC is 13 digits
387
+ var CNIC = /^[1-7][0-9]{4}-[0-9]{7}-[1-9]$/;
388
+
389
+ // sanitize user input
390
+ var sanitized = str.trim();
391
+
392
+ // validate the data structure
393
+ return CNIC.test(sanitized);
394
+ }
395
+ };
396
+ function isIdentityCard(str, locale) {
397
+ (0, _assertString.default)(str);
398
+ if (locale in validators) {
399
+ return validators[locale](str);
400
+ } else if (locale === 'any') {
401
+ for (var key in validators) {
402
+ // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes
403
+ // istanbul ignore else
404
+ if (validators.hasOwnProperty(key)) {
405
+ var validator = validators[key];
406
+ if (validator(str)) {
407
+ return true;
408
+ }
409
+ }
410
+ }
411
+ return false;
412
+ }
413
+ throw new Error("Invalid locale '".concat(locale, "'"));
414
+ }
415
+ module.exports = exports.default;
416
+ module.exports.default = exports.default;