curp.js
Version:
Función para generar el CURP, de acuerdo a las especificaciones oficiales.
148 lines (126 loc) • 5.14 kB
JavaScript
/*jslint node: true, indent:2, regexp:true*/
/*global describe,it,expect,beforeEach,afterEach,emit*/
;
var assert, curp, persona;
assert = require('assert');
curp = require('./../curp.js');
function Persona() {
return;
}
persona = new Persona();
beforeEach(function () {
persona.nombre = "pepito";
persona.apellido_paterno = "perez";
persona.apellido_materno = "alvarado";
persona.sexo = "M";
persona.estado = "DF";
persona.fecha_nacimiento = [1, 1, 1969];
});
describe('Posiciones 1-4', function () {
it('Deberia regresar "x" si la primer letra de algun de los nombres es Ñ', function () {
persona.setName('alberto', 'ñando', 'rodriguez');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'XARA');
});
describe('Deberia utilizar la primera letra de la primera palabra cuando el nombre es compuesto. Siempre y cuando no sea "MARIA, MA, MA., JOSE, J o JJ" ', function () {
it('Para Maria', function () {
persona.setName('maria luisa', 'perez', 'hernandez');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'PEHL');
});
it('Para compuesto regular', function () {
persona.setName('luis enrique', 'romero', 'palazuelos');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'ROPL');
});
});
it('Deberia regresar "X" en caso que un caracter especial como "/" o "-" vaya a ser utilizado en la creacion de la clave', function () {
persona.setName("juan jose", "d/amico", "alvarez");
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'DXAJ');
});
it("Deberia remover dieresis si se llegara a tener que utilizar una letra con ellas", function () {
persona.setName('Pedro', 'güero', 'hernandez');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'GUHP');
});
it('Deberia utilizar la primera palabra en apellidos compuestos', function () {
persona.setName('rocio', 'riva palacio', 'cruz');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'RICR');
});
it('Deberia de quitar las preposiciones, conjunciones o contracciones', function () {
persona.setName('carlos', 'MC Gregor', 'lopez');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'GELC');
});
it('Deberia cambiar la segunda letra por una "X" si la clave es una palabra altisonante', function () {
persona.setName('ofelia', 'pedrero', 'dominguez');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'PXDO');
});
it('Deberia poner una "x" en vez de una segunda letra si el primer apellido no tiene una vocal interna', function () {
persona.setName('andres', 'ich', 'rodríguez');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'IXRA');
});
it('Debera asignar una x en la 3ra posicion de la clave si no hay segundo apellido', function () {
persona.setName('luis', 'perez', '');
var letras = curp(persona).substr(0, 4);
assert.equal(letras, 'PEXL');
});
});
describe('Posiciones 14-16', function () {
describe('Deberia asignar una "X"', function () {
it('cuando la primera consonante interna sea una ñ', function () {
persona.setName('alberto', 'oñante', 'rodriguez');
var letras = curp(persona).substr(13, 3);
assert.equal(letras, 'XDL');
});
it('Cuando no existan consonantes internas', function () {
persona.setName('andres', 'po', 'barrios');
var letras = curp(persona).substr(13, 3);
assert.equal(letras, 'XRN');
});
it('en la posicion 15 cuando haya un solo apellido', function () {
persona.setName('leticia', 'luna', undefined);
var letras = curp(persona).substr(13, 3);
assert.equal(letras, 'NXT');
});
});
describe('Deberia utilizar la primera consonante interna del primer nombre', function () {
it('cuando este sea compuesto', function () {
persona.setName('juan jose', 'alvarado', 'barrios');
var letras = curp(persona).substr(13, 3);
assert.equal(letras, 'LRN');
});
it('Excepto si es maria o jose, en ese caso se usa el segundo nombre', function () {
persona.setName('ma. de los angeles', 'moreno', 'sanchez');
var letras = curp(persona).substr(13, 3);
assert.equal(letras, 'RNN');
});
it('Pero si es maria o jose y solo tiene un nombre, debe usar ese', function () {
persona.setName('Maria', 'moreno', 'sanchez');
var letras = curp(persona).substr(13, 3);
assert.equal(letras, 'RNR');
});
});
});
describe('Usando un curp famoso', function () {
it('Deberia dar PXNE como las primeras 4 letras', function () {
var curpstr = curp({
nombre: 'enrique',
apellido_paterno: 'peña',
apellido_materno: 'nieto',
sexo: 'H',
estado: 'MC',
fecha_nacimiento: [20, 7, 1966]
});
assert.equal(curpstr, 'PXNE660720HMCXTN06');
});
});
Persona.prototype.setName = function (nombre, apellido_paterno, apellido_materno) {
this.nombre = nombre;
this.apellido_paterno = apellido_paterno;
this.apellido_materno = apellido_materno;
};