isIdentityCard.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = isIdentityCard;
  6. var _assertString = _interopRequireDefault(require("./util/assertString"));
  7. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  8. var validators = {
  9. ES: function ES(str) {
  10. (0, _assertString.default)(str);
  11. var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/;
  12. var charsValue = {
  13. X: 0,
  14. Y: 1,
  15. Z: 2
  16. };
  17. 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']; // sanitize user input
  18. var sanitized = str.trim().toUpperCase(); // validate the data structure
  19. if (!DNI.test(sanitized)) {
  20. return false;
  21. } // validate the control digit
  22. var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) {
  23. return charsValue[char];
  24. });
  25. return sanitized.endsWith(controlDigits[number % 23]);
  26. }
  27. };
  28. function isIdentityCard(str) {
  29. var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'any';
  30. (0, _assertString.default)(str);
  31. if (locale in validators) {
  32. return validators[locale](str);
  33. } else if (locale === 'any') {
  34. for (var key in validators) {
  35. if (validators.hasOwnProperty(key)) {
  36. var validator = validators[key];
  37. if (validator(str)) {
  38. return true;
  39. }
  40. }
  41. }
  42. return false;
  43. }
  44. throw new Error("Invalid locale '".concat(locale, "'"));
  45. }
  46. module.exports = exports.default;
  47. module.exports.default = exports.default;