Hoy les traigo una función diseñada para sql server que muestra como hacer una sencilla validación de un numero de cédula nicaragüense. Esta función la he usado por varios años y funciona sin problemas para las versiones 2005, 2008 y 2012 de Microsoft SQL Server.
Sin mas preámbulo acá les dejo el código:
IF OBJECT_ID (N'dbo.ufn_EsCedula') IS NOT NULL DROP FUNCTION dbo.ufn_EsCedula GO /* * Autor: William Sánchez * Descripción: Verifica si una cadena de texto es un numero de cédula valida * 1) verifica que tenga el patrón:13 dígitos + 1 letra * 2) verifica que los 6 dígitos del 4to al 9no correspondan a una fecha valida */ CREATE FUNCTION ufn_EsCedula(@Texto NVARCHAR(16)) RETURNS BIT BEGIN DECLARE @EsCedula BIT IF(@Texto LIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z]') BEGIN IF (ISDATE(SUBSTRING(@Texto,8,2)+SUBSTRING(@Texto,6,2)+SUBSTRING(@Texto,4,2))=1) SET @EsCedula = 1; ELSE SET @EsCedula = 0; END ELSE SET @EsCedula = 0; RETURN @EsCedula; END
Espero que les sea de utilidad. Como siempre, agradezco sus comentarios constructivos.
Saludos
USE [TUBASEDATOS]
ResponderEliminarGO
/****** Object: UserDefinedFunction [dbo].[ufn_EsCedula] Script Date: 31/5/2018 5:42:33 p. m. ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/*
* Autor: William Sánchez
* Descripción: Verifica si una cadena de texto es un numero de cédula valida
* 1) verifica que tenga el patrón:13 dígitos + 1 letra
* 2) verifica que los 6 dígitos del 4to al 9no correspondan a una fecha valida
* Basado en el trabajo de: Arnoldo Suarez Bonilla - arsubo@yahoo.es
* Tomado del Trabajo de: Denis Torres Guadamuz
* Validador de Número de Cédula Nicaraguense JavaScrpt
*/
CREATE FUNCTION [dbo].[ufn_EsCedula](@Texto NVARCHAR(16))
RETURNS BIT
BEGIN
DECLARE @EsCedula BIT
declare @cedula varchar(20),
@val numeric(13, 0),
@letra char(1),
@Letras varchar(23),
@Letracedula char(1)
set @Letras = 'ABCDEFGHJKLMNPQRSTUVWXY'
set @cedula = SUBSTRING(REPLACE(@Texto,'-',''),1,13) --PARTE NUMERICA DE LA CEDULA SIN GUIONES
set @Letracedula = SUBSTRING(REPLACE(LTrim(Rtrim(@Texto)),'-',''),14,1)
--CALCULO DE LA LETRA DE LA CEDULA
set @val = convert(numeric(13, 0), @cedula) - floor(convert(numeric(13, 0), @cedula) / 23) * 23
set @letra = SUBSTRING(@Letras, @val + 1, 1)
IF(@Texto LIKE'[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][A-Z]')
BEGIN
IF (ISDATE(SUBSTRING(@Texto,8,2)+SUBSTRING(@Texto,6,2)+SUBSTRING(@Texto,4,2))=1)
-- Validamos la letra calculada con la letra digitada en documento
if (@letra= @Letracedula)
SET @EsCedula = 1;
else
SET @EsCedula = 0;
ELSE
SET @EsCedula = 0;
END
ELSE
SET @EsCedula = 0;
RETURN @EsCedula;
END
Este es un aporte a mas a complementar la función, usando la colaboracion de Denis Torres Guadamuz , donde hare referencia : Basado en el trabajo de: Arnoldo Suarez Bonilla - arsubo@yahoo.es