Array
(
)

Validação de CPF

Orfeua
   - 19 jul 2004

:lol:

Olá galera, gostaria de saber se alguém tem ou conhece algum script que verifica se o CPF e o CNPJ são validos no SQL Server 2000, e se possível que tenha caso o CNPJ ou o CPF for invalido ele insere os dados em outra tabela , se souberem só a primeira parte da me ajudam 80¬, minha taabela chama-se DM04CAR e o campo que quero consultar é CPF_CNPJ,

Grato pela atenção. :P

Marcus.magalhaes
   - 23 jul 2004

Boa tarde Orfeu, eu fiz 2 funções q consistem CPF e CNPJ...se retornar 0 está correta, se retornar -1 está errado
CPF =
Drop Function dbo.fc_VALIDA_CPF
GO

Create Function dbo.fc_VALIDA_CPF
(
@var_numcpfChar(11) = NULL
) Returns Int
As
Begin
Declare @var_retornoInt

If @var_numcpf Is NULL
Begin
Return -999
End

-- Variaveis usadas para calculo dos digitos
Declare@var_tempdigito1Int,
@var_tempdigito2Int,
@var_somadigito1Int,
@var_somadigito2Int,
@var_contadorInt

-- Variaveis que irao receber os 9 primeiros digito e os 2 ultimos
Declare @var_inicioChar(9),
@var_fimChar(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

e CNPJ =

Drop Function fc_VALIDA_CNPJ
GO
Create Function fc_VALIDA_CNPJ
(
@var_numcnpjVarChar(14) = NULL
) Returns Int
As
Begin
Declare @var_retornoInt

-- Variaveis usadas para calculo dos digitos
Declare@var_tempdigito1Int,
@var_tempdigito2Int,
@var_somadigito1Int,
@var_somadigito2Int,
@var_subtraidig1Int,
@var_subtraidig2Int,
@var_contadorInt

-- Variaveis que irao receber os 9 primeiros digito e os 2 ultimos
Declare @var_inicioChar(13),
@var_fimChar(2)

Set @var_inicio = SubString(@var_numcnpj, 1, 12)
Set @var_fim = SubString(@var_numcnpj, 13, 2)

Set @var_somadigito1 = 0
Set @var_somadigito2 = 0

-- Calcula 1o. digito, tem q calcular separado pq ele sera usado para o calculo do
-- 2o. digito
Set @var_contador = 1
While (@var_contador <= Len(Ltrim(Rtrim(@var_inicio))))
Begin
If @var_contador < 5
Begin
Set @var_subtraidig1 = @var_contador + 5
End
Else
Begin
Set @var_subtraidig1 = @var_contador - 3
End

Set @var_somadigito1 = @var_somadigito1 + (Convert(Int, SubString(@var_inicio, @var_contador, 1)) * @var_subtraidig1)

Set @var_contador = @var_contador + 1
End

If @var_somadigito1 > (11 * Convert(Int, (@var_somadigito1 / 11)))
Begin
Set @var_tempdigito1 = @var_somadigito1 - (11 * Convert(Int, (@var_somadigito1 / 11)))
End
Else
Begin
Set @var_tempdigito1 = (11 * Convert(Int, (@var_somadigito1 / 11))) - @var_somadigito1
End
If @var_tempdigito1 = 10
Begin
Set @var_tempdigito1 = 0
End

-- Une o inicial do cnpj com o primeiro digito encontrado
Set @var_inicio = Ltrim(Rtrim(@var_inicio)) + Convert(Char(1), @var_tempdigito1)

-- Calcula 2o digito
Set @var_contador = 1
While (@var_contador <= Len(@var_inicio))
Begin
If @var_contador < 6
Begin
Set @var_subtraidig2 = @var_contador + 4
End
Else
Begin
Set @var_subtraidig2 = @var_contador - 4
End

Set @var_somadigito2 = @var_somadigito2 + (Convert(Int, SubString(@var_inicio, @var_contador, 1)) * @var_subtraidig2)

Set @var_contador = @var_contador + 1
End

If @var_somadigito2 > (11 * Convert(Int, (@var_somadigito2 / 11)))
Begin
Set @var_tempdigito2 = @var_somadigito2 - (11 * Convert(Int, (@var_somadigito2 / 11)))
End
Else
Begin
Set @var_tempdigito2 = (11 * Convert(Int, (@var_somadigito2 / 11))) - @var_somadigito2
End
If @var_tempdigito2 = 10
Begin
Set @var_tempdigito2 = 0
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

Vc usa da seguinte forma :

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

Att,