viernes, 1 de agosto de 2014

Validar número de cédula nicaragüense en sql server

Hola amigos.

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

1 comentario:

  1. USE [TUBASEDATOS]
    GO
    /****** 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

    ResponderEliminar