Utilizando digito verificador para cadastros

22/07/2004

0

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


Felipe_cduarte

Felipe_cduarte

Responder

Posts

23/07/2004

Marcus.magalhaes

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,


Responder

24/07/2004

Felipe_cduarte

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


Responder

24/07/2004

Seu-madruga

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


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar