Comparing version 0.1.2 to 0.1.3
{ | ||
"name": "curp.js", | ||
"main": "curp.js", | ||
"version": "0.1.1", | ||
"version": "0.1.3", | ||
"authors": [ | ||
@@ -6,0 +6,0 @@ "Christopher Luna <dev@christopher-luna.com>" |
69
curp.js
@@ -82,4 +82,3 @@ /*jslint indent:2, regexp:true*/ | ||
} | ||
var pad = zeropad.bind(null, 2); | ||
var pad = zeropad.bind(null, 2), comunes = [ 'MARIA', 'MA', 'MA.', 'JOSE', 'J', 'J.' ]; | ||
/** | ||
@@ -93,3 +92,3 @@ * primerConsonante() | ||
str = str.trim().substring(1).replace(/[AEIOU]/ig, '').substring(0, 1); | ||
return (str === '') ? 'X' : str; | ||
return (str === '' || str === 'Ñ') ? 'X' : str; | ||
} | ||
@@ -130,7 +129,7 @@ | ||
'è', 'é', 'ë', 'ê', 'ì', 'í', 'ï', 'î', 'ò', 'ó', 'ö', 'ô', 'ù', | ||
'ú', 'ü', 'û', 'Ñ', 'ñ', 'Ç', 'ç' ]; | ||
'ú', 'ü', 'û', 'Ç', 'ç' ]; | ||
destino = [ 'A', 'A', 'A', 'A', 'A', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', | ||
'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'a', 'a', 'a', 'a', 'a', | ||
'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'u', | ||
'u', 'u', 'u', 'n', 'n', 'c', 'c' ]; | ||
'u', 'u', 'u', 'c', 'c' ]; | ||
str = str.split(''); | ||
@@ -181,3 +180,20 @@ salida = str.map(function (char) { | ||
/** | ||
* extraerInicial() | ||
* Funcion que extrae la inicial del primer nombre, o, si tiene mas de 1 nombre Y el primer | ||
* nombre es uno de la lista de nombres comunes, la inicial del segundo nombre | ||
* @param {string} nombre - String que representa todos los nombres (excepto los apellidos) separados por espacio | ||
*/ | ||
function extrarInicial(nombre) { | ||
var nombres, primerNombreEsComun; | ||
nombres = nombre.toUpperCase().trim().split(/\s+/); | ||
primerNombreEsComun = (nombres.length > 1 && comunes.indexOf(nombres[0]) > -1); | ||
if (primerNombreEsComun) { | ||
return nombres[1].substring(0, 1); | ||
} | ||
return nombres[0].substring(0, 1); | ||
} | ||
/** | ||
@@ -199,3 +215,3 @@ * generaCurp() | ||
function generaCurp(param) { | ||
var inicial_nombre, vocal_apellido, posicion_1_4, posicion_14_16, curp; | ||
var inicial_nombre, vocal_apellido, posicion_1_4, posicion_14_16, curp, primera_letra_paterno, primera_letra_materno, nombres, nombre_a_usar; | ||
@@ -208,27 +224,25 @@ if (!estadoValido(param.estado)) { | ||
param.apellido_paterno = ajustaCompuesto(normalizaString(param.apellido_paterno.toUpperCase())).trim(); | ||
param.apellido_materno = param.apellido_materno || ""; | ||
param.apellido_materno = ajustaCompuesto(normalizaString(param.apellido_materno.toUpperCase())).trim(); | ||
// La inicial del primer nombre, o, si tiene mas de 1 nombre Y el primer | ||
// nombre es uno de la lista de nombres comunes, la inicial del segundo nombre | ||
inicial_nombre = (function (nombre) { | ||
var comunes, nombres, primerNombreEsComun; | ||
comunes = [ 'MARIA', 'MA', 'MA.', 'JOSE', 'J', 'J.' ]; | ||
nombres = nombre.toUpperCase().trim().split(/\s+/); | ||
primerNombreEsComun = (nombres.length > 1 && comunes.indexOf(nombres[0]) > -1); | ||
inicial_nombre = extrarInicial(param.nombre); | ||
if (primerNombreEsComun) { | ||
return nombres[1].substring(0, 1); | ||
} | ||
if (!primerNombreEsComun) { | ||
return nombres[0].substring(0, 1); | ||
} | ||
}(param.nombre)); | ||
vocal_apellido = param.apellido_paterno.trim().substring(1).replace(/[^AEIOU]/g, '').substring(0, 1); | ||
vocal_apellido = param.apellido_paterno.trim().substring(1).replace(/[BCDFGHJKLMNÑPQRSTVWXYZ]/g, '').substring(0, 1); | ||
vocal_apellido = (vocal_apellido === '') ? 'X' : vocal_apellido; | ||
primera_letra_paterno = param.apellido_paterno.substring(0, 1); | ||
primera_letra_paterno = primera_letra_paterno === 'Ñ' ? 'X' : primera_letra_paterno; | ||
if (!param.apellido_materno || param.apellido_materno === "") { | ||
primera_letra_materno = 'X'; | ||
} else { | ||
primera_letra_materno = param.apellido_materno.substring(0, 1); | ||
primera_letra_materno = primera_letra_materno === 'Ñ' ? 'X' : primera_letra_materno; | ||
} | ||
posicion_1_4 = [ | ||
param.apellido_paterno.substring(0, 1), | ||
primera_letra_paterno, | ||
vocal_apellido, | ||
param.apellido_materno.substring(0, 1), | ||
primera_letra_materno, | ||
inicial_nombre | ||
@@ -239,6 +253,11 @@ ].join(''); | ||
nombres = param.nombre.split(" ").filter(function (palabra) { | ||
return palabra !== ""; | ||
}); | ||
nombre_a_usar = comunes.indexOf(nombres[0]) > -1 ? nombres[1] : nombres[0]; | ||
posicion_14_16 = [ | ||
primerConsonante(param.apellido_paterno), | ||
primerConsonante(param.apellido_materno), | ||
primerConsonante(param.nombre) | ||
primerConsonante(nombre_a_usar) | ||
].join(''); | ||
@@ -245,0 +264,0 @@ |
@@ -11,3 +11,3 @@ /*jslint node: true, indent:2*/ | ||
all : { | ||
src : ['package.json', 'bower.json', 'curp.js', 'Gruntfile.js'], | ||
src : ['package.json', 'bower.json', 'curp.js', 'Gruntfile.js', 'test/**.js'], | ||
directives : { | ||
@@ -18,2 +18,7 @@ indent : 2, | ||
} | ||
}, | ||
mochaTest : { | ||
test : { | ||
src : ['test/**/*.js'] | ||
} | ||
} | ||
@@ -23,6 +28,8 @@ }); | ||
grunt.loadNpmTasks('grunt-jslint'); | ||
grunt.loadNpmTasks('grunt-mocha-test'); | ||
// Default task(s). | ||
grunt.registerTask('default', [ | ||
'jslint' | ||
'jslint', | ||
'mochaTest' | ||
]); | ||
@@ -29,0 +36,0 @@ |
{ | ||
"name": "curp.js", | ||
"version": "0.1.2", | ||
"version": "0.1.3", | ||
"description": "Función para generar el CURP, de acuerdo a las especificaciones oficiales.", | ||
"main": "curp.js", | ||
"scripts": { | ||
"test": "grunt" | ||
"test": "grunt", | ||
"mocha": "grunt mochaTest" | ||
}, | ||
@@ -25,4 +26,6 @@ "repository": { | ||
"grunt": "^0.4.5", | ||
"grunt-jslint": "^1.1.12" | ||
"grunt-jslint": "^1.1.12", | ||
"grunt-mocha-test": "^0.12.7", | ||
"mocha": "^2.2.5" | ||
} | ||
} |
curp.js | ||
======= | ||
[![Build Status](https://travis-ci.org/prestigos/curp.js.png?branch=master)](https://travis-ci.org/prestigos/curp.js) | ||
Función para generar el CURP, de acuerdo a las especificaciones oficiales. | ||
@@ -11,2 +13,3 @@ | ||
Navegador : `<script src="curp.js"></script>` | ||
Node.js : `var generaCurp = require('curp');` | ||
@@ -27,2 +30,23 @@ | ||
## Pruebas | ||
Para correr las pruebas utiliza el comando: | ||
```bash | ||
npm run mocha | ||
``` | ||
## Changelog | ||
* 0.1.3 | ||
- Agregadas pruebas con mocha (creditos a @Dudemullet) | ||
- Correcciones en el algoritmo (creditos a @Dudemullet) | ||
* 0.1.2 | ||
- Correccion en homonimia | ||
- Reemplazado jshint por jslint | ||
* 0.1.1 | ||
- Agregado `normalizaString()` | ||
* 0.1.0 | ||
- Primer version | ||
## Licencia | ||
@@ -29,0 +53,0 @@ |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
17870
8
398
54
4