Los números de documentos de identidad tienen un dígito que se calcula en función del resto. Esto se hace para que sea posible comprobar que se ha dado un número correcto. Si alguien te da el número de documento 11111111-J, sabes que se ha equivocado. En el caso hipotético de que la parte numérica estuviese bien, la letra que le correspondería debería de ser una H y no una J.
Si, por algún motivo, necesitas comprobar la validez de un número de identidad, seguro que te interesa la página de generadores y validaciones de documentos de GenWare. Buscando un poco, verás que es bastante fácil encontrar sitios en internet en los que se pueden generar o validar números de documento.
El caso es que las herramientas online son muy útiles cuando sólo quieres validar un número y puedes permitirte hacerlo manualmente. Sin embargo, esto es rara vez así. Lo normal es que quieras que un formulario de una aplicación -o página web- en la que se pide a alguien su número de documento, sea capaz de validarlo. Igual que no aceptas un campo en que se ha rellenado un email sin introducir una arroba, tampoco te interesa aceptar un número de documento que sabes que no es válido.
SELECT IsValidDocNumber_es('Q2816003D') AS IsValid;
-- Returns 2
Buscando un poco más, encontrarás también un montón de scripts en JavaScript, PHP, Java y cosas por el estilo, que hacen este tipo de validaciones.
Hace no mucho, en cambio, me vi en la necesidad de validar números de documento que ya tenía en una base de datos. Esto puede ser más necesario de lo que parece: cuando haces importaciones masivas de datos, cuando ya habías empezado a recoger datos antes de activar la validación, o cuando quieres hacer la validación desde el lado del servidor para garantizar que de ningún modo podrá ser evitada.
Para solventar esto, lo que hice fue una traducción a SQL (para usarla desde MySQL) de un script de Josep Rosell que encontré bajo el título validar NIF, CIF, NIE según ley vigente. El artículo es de noviembre de 2011 pero a día de hoy -16 de agosto de 2012- sigue vigente.
SELECT getDocType_es('Q2816003D') AS DocType;
-- Returns CIF: Organismo público...
Tener las funciones disponibles desde MySQL facilita un montón ciertas operaciones. Dada una tabla entidades en la que existiese un campo CIF, podrías sacar muy rápidamente un porcentaje de CIFs incorrectos de tu base de datos. Bastaría con ejecutar la query:
SELECT
IsValidDocNumber_es(CIF) AS IsValid,
count(*) AS CIFs
FROM entidades
GROUP BY IsValidDocNumber_es(CIF);
Es sólo una muestra pero creo que da una idea de las posibilidades que ofrece tener esta función disponible desde MySQL. Para facilitarme la vida, la he colgado en GitHub como mysql-validdoc-es.








0 respuestas ↓
Si crees que tienes algo interesante que aportar, sírvete. En caso contrario, di alguna tontería.
Dejar un comentario