Array
(
)

Utilizando digito verificador para cadastros

Felipe_cduarte
   - 22 jul 2004

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

Marcus.magalhaes
   - 23 jul 2004

Olá Felipe, segue abaixo uma função q verifica CPF, vc pode extrair a idéia para construir a sua.

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

Usa-se assim :

Declare @variavel Int

Select @variavel = dbo.fc_VALIDA_CPF (´00000000000´)

Se @variavel = 0 => OK
Se @variavel = -1 => Errado

Att,

Felipe_cduarte
   - 24 jul 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

Seu-madruga
   - 24 jul 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