Utilizando digito verificador para cadastros
Fala pessoal,
tem vontade de utilizar digitos verificadores para implementação em cadastros, como por exemplo o CPF, que tem um numero sequencial ( 999999999) e depois 2 digitos ( 99 ). Alguem já utlizou esta implementação ou pode me dar uma ajuda ? Quem tiver uma experiencia bem sucedida e quiser compartilhar desde já agradeço
[]´s
tem vontade de utilizar digitos verificadores para implementação em cadastros, como por exemplo o CPF, que tem um numero sequencial ( 999999999) e depois 2 digitos ( 99 ). Alguem já utlizou esta implementação ou pode me dar uma ajuda ? Quem tiver uma experiencia bem sucedida e quiser compartilhar desde já agradeço
[]´s
Felipe_cduarte
Curtidas 0
Respostas
Marcus.magalhaes
22/07/2004
Olá Felipe, segue abaixo uma função q verifica CPF, vc pode extrair a idéia para construir a sua.
[color=green:7943cd9811]Drop Function dbo.fc_VALIDA_CPF
GO
Create Function dbo.fc_VALIDA_CPF
(
@var_numcpf Char(11) = NULL
) Returns Int
As
Begin
Declare @var_retorno Int
If @var_numcpf Is NULL
Begin
Return -999
End
-- Variaveis usadas para calculo dos digitos
Declare @var_tempdigito1 Int,
@var_tempdigito2 Int,
@var_somadigito1 Int,
@var_somadigito2 Int,
@var_contador Int
-- Variaveis que irao receber os 9 primeiros digito e os 2 ultimos
Declare @var_inicio Char(9),
@var_fim Char(2)
Set @var_inicio = SubString(@var_numcpf, 1, 9)
Set @var_fim = SubString(@var_numcpf, 10, 2)
Set @var_somadigito1 = 0
Set @var_somadigito2 = 0
Set @var_contador = 1
While (@var_contador <= Len(@var_inicio))
Begin
Set @var_somadigito1 = @var_somadigito1 + (Convert(Int, SubString(@var_inicio, @var_contador, 1)) * (11 - @var_contador))
Set @var_somadigito2 = @var_somadigito2 + (Convert(Int, SubString(@var_inicio, @var_contador, 1)) * (12 - @var_contador))
Set @var_contador = @var_contador + 1
End
Set @var_tempdigito1 = @var_somadigito1 - (11 * Convert(Int, (@var_somadigito1 / 11)))
If @var_tempdigito1 = 0 Or @var_tempdigito1 = 1
Begin
Set @var_tempdigito1 = 0
End
Else
Begin
Set @var_tempdigito1 = 11 - @var_tempdigito1
End
Set @var_tempdigito2 = @var_somadigito2 * 2
Set @var_tempdigito2 = @var_somadigito2 - (11 * Convert(Int, @var_somadigito2 / 11))
If @var_tempdigito2 = 0 Or @var_tempdigito2 = 1
Begin
Set @var_tempdigito2 = 0
End
Else
Begin
Set @var_tempdigito2 = 12 - @var_tempdigito2
End
If @var_fim = Convert(Char(1), @var_tempdigito1) + Convert(Char(1), @var_tempdigito2)
Begin
Set @var_retorno = 0
End
Else
Begin
Set @var_retorno = -1
End
Return(@var_retorno)
End
GO [/color:7943cd9811]
Usa-se assim :
[color=darkblue:7943cd9811]Declare @variavel Int
Select @variavel = dbo.fc_VALIDA_CPF (´00000000000´)[/color:7943cd9811]
Se @variavel = 0 => OK
Se @variavel = -1 => Errado
Att,
[color=green:7943cd9811]Drop Function dbo.fc_VALIDA_CPF
GO
Create Function dbo.fc_VALIDA_CPF
(
@var_numcpf Char(11) = NULL
) Returns Int
As
Begin
Declare @var_retorno Int
If @var_numcpf Is NULL
Begin
Return -999
End
-- Variaveis usadas para calculo dos digitos
Declare @var_tempdigito1 Int,
@var_tempdigito2 Int,
@var_somadigito1 Int,
@var_somadigito2 Int,
@var_contador Int
-- Variaveis que irao receber os 9 primeiros digito e os 2 ultimos
Declare @var_inicio Char(9),
@var_fim Char(2)
Set @var_inicio = SubString(@var_numcpf, 1, 9)
Set @var_fim = SubString(@var_numcpf, 10, 2)
Set @var_somadigito1 = 0
Set @var_somadigito2 = 0
Set @var_contador = 1
While (@var_contador <= Len(@var_inicio))
Begin
Set @var_somadigito1 = @var_somadigito1 + (Convert(Int, SubString(@var_inicio, @var_contador, 1)) * (11 - @var_contador))
Set @var_somadigito2 = @var_somadigito2 + (Convert(Int, SubString(@var_inicio, @var_contador, 1)) * (12 - @var_contador))
Set @var_contador = @var_contador + 1
End
Set @var_tempdigito1 = @var_somadigito1 - (11 * Convert(Int, (@var_somadigito1 / 11)))
If @var_tempdigito1 = 0 Or @var_tempdigito1 = 1
Begin
Set @var_tempdigito1 = 0
End
Else
Begin
Set @var_tempdigito1 = 11 - @var_tempdigito1
End
Set @var_tempdigito2 = @var_somadigito2 * 2
Set @var_tempdigito2 = @var_somadigito2 - (11 * Convert(Int, @var_somadigito2 / 11))
If @var_tempdigito2 = 0 Or @var_tempdigito2 = 1
Begin
Set @var_tempdigito2 = 0
End
Else
Begin
Set @var_tempdigito2 = 12 - @var_tempdigito2
End
If @var_fim = Convert(Char(1), @var_tempdigito1) + Convert(Char(1), @var_tempdigito2)
Begin
Set @var_retorno = 0
End
Else
Begin
Set @var_retorno = -1
End
Return(@var_retorno)
End
GO [/color:7943cd9811]
Usa-se assim :
[color=darkblue:7943cd9811]Declare @variavel Int
Select @variavel = dbo.fc_VALIDA_CPF (´00000000000´)[/color:7943cd9811]
Se @variavel = 0 => OK
Se @variavel = -1 => Errado
Att,
GOSTEI 0
Felipe_cduarte
22/07/2004
Fala Marcus blz ?
muito boa essa function, testei aqui e funcionou legal... só que em tava querendo idéias sobre a implementação da tabela... eu usei o CPF como exemplo. Para ficar melhor explicado aí vai outro exemplo. Tenho um cadastro de funcionarios e queria implementar um digito para eles:
Joao da Silva 0001-9
0001: sequencial
9: digito verificador
já utilizou algo assim ??
[]´s
muito boa essa function, testei aqui e funcionou legal... só que em tava querendo idéias sobre a implementação da tabela... eu usei o CPF como exemplo. Para ficar melhor explicado aí vai outro exemplo. Tenho um cadastro de funcionarios e queria implementar um digito para eles:
Joao da Silva 0001-9
0001: sequencial
9: digito verificador
já utilizou algo assim ??
[]´s
GOSTEI 0
Seu-madruga
22/07/2004
Ae Don, tu pode usar o Dígito 11 .. que consiste em somar cada caracter e dividir a soma por 11. Se o resto < 2 o dígito é zero, senão o dígito é 11 - resto.
Ex.: 1234: 5+6+7+8 = 26, 26/11 = 2,3
11 - 3 = 8 (tá ae o dígito)
Para adaptar no SQL Server, pegue como base a function acima.
[]´s
Ex.: 1234: 5+6+7+8 = 26, 26/11 = 2,3
11 - 3 = 8 (tá ae o dígito)
Para adaptar no SQL Server, pegue como base a function acima.
[]´s
GOSTEI 0