'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = isIdentityCard; var _assertString = require('./util/assertString'); var _assertString2 = _interopRequireDefault(_assertString); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var validators = { ES: function ES(str) { (0, _assertString2.default)(str); var DNI = /^[0-9X-Z][0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKE]$/; var charsValue = { X: 0, Y: 1, Z: 2 }; 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 var sanitized = str.trim().toUpperCase(); // validate the data structure if (!DNI.test(sanitized)) { return false; } // validate the control digit var number = sanitized.slice(0, -1).replace(/[X,Y,Z]/g, function (char) { return charsValue[char]; }); return sanitized.endsWith(controlDigits[number % 23]); } }; function isIdentityCard(str) { var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'any'; (0, _assertString2.default)(str); if (locale in validators) { return validators[locale](str); } else if (locale === 'any') { for (var key in validators) { if (validators.hasOwnProperty(key)) { var validator = validators[key]; if (validator(str)) { return true; } } } return false; } throw new Error('Invalid locale \'' + locale + '\''); } module.exports = exports['default'];