@singuerinc


2011-06-17 by Nahuel Scotti | 2 min read

Validar DNI/NIE/NIF de España

  • #actionscript3
  • #dni
  • #javascript
  • #nie
  • #nif
  • #validators

Update! Si bien este código funciona, te recomiendo utilizar mi nueva librería "Better DNI" que he publicado en Github. Puedes probarla aquí: https://better-dni.singuerinc.com/

Hola, otra Class de validación, en este caso para validar un DNI español.
Realicé una classe porque quería tener un set de funciones, y poder diferenciar si se trata de un nif o un nie.

La clase acepta "nies" que empiecen con letra o número y puede ser en mayúsculas o minúsculas, por ejemplo, es lo mismo Y9145668P que 19145668p.

Aquí el código:

package net.singuerinc.labs.utils.validators {
    public class SpainDNIValidator {

        private var _dni:String;

        private var _isNie:Boolean;
        private var _isNif:Boolean;
        private var _valid:Boolean;

        private const validChars:String = 'TRWAGMYFPDXBNJZSQVHLCKET';
        private const nifRexp:RegExp = /^[0-9]{8}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i;
        private const nieRexp:RegExp = /^[XYZ]{1}[0-9]{7}[TRWAGMYFPDXBNJZSQVHLCKET]{1}$/i;

        public function SpainDNIValidator(dni:String) {
            _dni = dni;
            _valid = _validate();
        }

        public function isValid():Boolean {
            return _valid;
        }

        public function isNIF():Boolean {
            return _isNif;
        }

        public function isNIE():Boolean {
            return _isNie;
        }

        private function _validate():Boolean {

            var val:String = _dni.toString().toUpperCase();

            if (!nifRexp.test(val) && !nieRexp.test(val)) {
                return false;
            }

            var nie:String = val;
            nie = nie.replace(/^[X]/, '0');
            nie = nie.replace(/^[Y]/, '1');
            nie = nie.replace(/^[Z]/, '2');

            var dniLetter:String = val.substr(-1);
            var charIndex:int = int(nie.substr(, 8)) % 23;

            if (validChars.charAt(charIndex) == dniLetter) {

                _isNif = nifRexp.test(val);
                _isNie = nieRexp.test(val);

                return true;
            }

            return false;
        }
    }
}

Y algunos ejemplos:

var val1: SpainDNIValidator = new SpainDNIValidator("x9464186p");
val1.isValid(); //true
val1.isNIF(); //false
val1.isNIE(); //true

var val2: SpainDNIValidator = new SpainDNIValidator("12345678Z");
val2.isValid(); //true
val2.isNIF(); //true
val2.isNIE(); //false

Puedes encontrar la última versión en github.