Browse Source

#232: Spanish ID adds support for NIE number

phuoc 11 years ago
parent
commit
caff8eb034
3 changed files with 30 additions and 8 deletions
  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)
+         * Support i) DNI (for Spanish citizens) and ii) NIE (for foreign people)
+         *
          * 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
          * @returns {Boolean}
          */
         _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;
             }
+
             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);
             check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
             return (check == value.substr(8, 1));

File diff suppressed because it is too large
+ 2 - 2
dist/js/bootstrapValidator.min.js


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

@@ -298,18 +298,29 @@
 
         /**
          * Validate Spanish personal identity code (DNI)
+         * Support i) DNI (for Spanish citizens) and ii) NIE (for foreign people)
+         *
          * 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
          * @returns {Boolean}
          */
         _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;
             }
+
             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);
             check = 'TRWAGMYFPDXBNJZSQVHLCKE'[check % 23];
             return (check == value.substr(8, 1));