浏览代码

#232: Spanish ID adds support for NIE number

phuoc 11 年之前
父节点
当前提交
caff8eb034
共有 3 个文件被更改,包括 30 次插入8 次删除
  1. 14 3
      dist/js/bootstrapValidator.js
  2. 2 2
      dist/js/bootstrapValidator.min.js
  3. 14 3
      src/js/validator/id.js

+ 14 - 3
dist/js/bootstrapValidator.js

@@ -2119,18 +2119,29 @@
 
 
         /**
         /**
          * Validate Spanish personal identity code (DNI)
          * Validate Spanish personal identity code (DNI)
+         * Support i) DNI (for Spanish citizens) and ii) NIE (for foreign people)
+         *
          * Examples:
          * Examples:
-         * - Valid: 54362315K, 54362315-K
-         * - Invalid: 54362315Z
+         * - Valid: i) 54362315K, 54362315-K; ii) X2482300W, X-2482300W, X-2482300-W
+         * - Invalid: i) 54362315Z; ii) X-2482300A
          *
          *
+         * @see https://en.wikipedia.org/wiki/National_identification_number#Spain
          * @param {String} value The ID
          * @param {String} value The ID
          * @returns {Boolean}
          * @returns {Boolean}
          */
          */
         _es: function(value) {
         _es: function(value) {
-            if (!/^[0-9A-Z]{8}[-]{0,1}[0-9A-Z]{1}$/.test(value)) {
+            if (!/^[0-9A-Z]{8}[-]{0,1}[0-9A-Z]$/.test(value)                // DNI
+                && !/^[XYZ][-]{0,1}[0-9]{7}[-]{0,1}[0-9A-Z]$/.test(value)) {   // NIE
                 return false;
                 return false;
             }
             }
+
             value = value.replace(/-/g, '');
             value = value.replace(/-/g, '');
+            var index = 'XYZ'.indexOf(value.charAt(0));
+            if (index != -1) {
+                // It is NIE number
+                value = index + value.substr(1) + '';
+            }
+
             var check = parseInt(value.substr(0, 8), 10);
             var check = parseInt(value.substr(0, 8), 10);
             check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
             check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
             return (check == value.substr(8, 1));
             return (check == value.substr(8, 1));

文件差异内容过多而无法显示
+ 2 - 2
dist/js/bootstrapValidator.min.js


+ 14 - 3
src/js/validator/id.js

@@ -298,18 +298,29 @@
 
 
         /**
         /**
          * Validate Spanish personal identity code (DNI)
          * Validate Spanish personal identity code (DNI)
+         * Support i) DNI (for Spanish citizens) and ii) NIE (for foreign people)
+         *
          * Examples:
          * Examples:
-         * - Valid: 54362315K, 54362315-K
-         * - Invalid: 54362315Z
+         * - Valid: i) 54362315K, 54362315-K; ii) X2482300W, X-2482300W, X-2482300-W
+         * - Invalid: i) 54362315Z; ii) X-2482300A
          *
          *
+         * @see https://en.wikipedia.org/wiki/National_identification_number#Spain
          * @param {String} value The ID
          * @param {String} value The ID
          * @returns {Boolean}
          * @returns {Boolean}
          */
          */
         _es: function(value) {
         _es: function(value) {
-            if (!/^[0-9A-Z]{8}[-]{0,1}[0-9A-Z]{1}$/.test(value)) {
+            if (!/^[0-9A-Z]{8}[-]{0,1}[0-9A-Z]$/.test(value)                // DNI
+                && !/^[XYZ][-]{0,1}[0-9]{7}[-]{0,1}[0-9A-Z]$/.test(value)) {   // NIE
                 return false;
                 return false;
             }
             }
+
             value = value.replace(/-/g, '');
             value = value.replace(/-/g, '');
+            var index = 'XYZ'.indexOf(value.charAt(0));
+            if (index != -1) {
+                // It is NIE number
+                value = index + value.substr(1) + '';
+            }
+
             var check = parseInt(value.substr(0, 8), 10);
             var check = parseInt(value.substr(0, 8), 10);
             check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
             check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
             return (check == value.substr(8, 1));
             return (check == value.substr(8, 1));