text: "use strict";
  
  Object.defineProperty(exports, "__esModule", {
    value: true
  });
  exports.default = isIdentityCard;
  
  var _assertString = _interopRequireDefault(require("./util/assertString"));
  
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  
  var validators = {
    ES: function ES(str) {
      (0, _assertString.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]);
    },
    'zh-TW': function zhTW(str) {
      var ALPHABET_CODES = {
        A: 10,
        B: 11,
        C: 12,
        D: 13,
        E: 14,
        F: 15,
        G: 16,
        H: 17,
        I: 34,
        J: 18,
        K: 19,
        L: 20,
        M: 21,
        N: 22,
        O: 35,
        P: 23,
        Q: 24,
        R: 25,
        S: 26,
        T: 27,
        U: 28,
        V: 29,
        W: 32,
        X: 30,
        Y: 31,
        Z: 33
      };
      var sanitized = str.trim().toUpperCase();
      if (!/^[A-Z][0-9]{9}$/.test(sanitized)) return false;
      return Array.from(sanitized).reduce(function (sum, number, index) {
        if (index === 0) {
          var code = ALPHABET_CODES[number];
          return code % 10 * 9 + Math.floor(code / 10);
        }
  
        if (index === 9) {
          return (10 - sum % 10 - Number(number)) % 10 === 0;
        }
  
        return sum + Number(number) * (9 - index);
      }, 0);
    }
  };
  
  function isIdentityCard(str) {
    var locale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'any';
    (0, _assertString.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 '".concat(locale, "'"));
  }
  
  module.exports = exports.default;
  module.exports.default = exports.default;