Página 1 de 1

Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 13 Jan 2022 10:42
por malcarli
Bom dia alguém tem rotina ou como calcular o dígito verificador do caepf – cadastro de atividade econômica da pessoa física.

obg

Att.

Marcelo A. L. Carli
Marília/SP
Capital Nacional do Alimento ®

https://malc-informatica.ueniweb.com
http://marcelo.lx.com.br
Email / Skype: malcarli@life.com.br

Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 13 Jan 2022 10:48
por alxsts
Olá!

Uma pesquisa simples no Google trouxe várias fórmulas, incluindo a que procura:DÍGITOS DE VERIFICAÇÃO

Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 13 Jan 2022 13:22
por malcarli
VALEU

Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 14 Jan 2022 13:41
por JoséQuintas
Até fiz a mesma, mas não entendi a excessão.
Portanto, o CAEPF+DV seria 293.118.610/001-72.
Mas há um senão: estaria sendo somado 12 ao DV encontrado.
E se o resultado da soma for maior do que 99, diminui-se 100.
No exemplo, o DV será 72+12=84.
É porque não existe exceção, existe apenas a regra geral de somar 12.

Código: Selecionar todos

nDigito1 := 7
nDigito2 := 2
nResultado := nDigito1 * 10 + nDigito2 
nDigitoGeral := Mod( nResultado + 12, 100 )

Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 14 Jan 2022 14:54
por malcarli
Com ajuda de colegas, posto a solução final.

Chamar a função assim:
fVercaepf([99990999999912]) ou
fVercaepf([999909999999]) sem os dígitos.

A função fVercaepf retorno string calculado com 14 dígitos.

Ai é só fazer um teste se os digitos da função são iguais aos dígitos do valor enviado

Código: Selecionar todos

Static Function fVercaepf(cString)
   Local i:= nSoma:= nDv:= 0, nFator:= 9

   cString:= SubStr(cString, 1, 12)
   
   For i:= Len(cString) To 1 Step -1
       nSoma += Val(SubStr(cString, i, 1)) * nFator
       nFator:= If(nFator == 2, 9, nFator - 1)
   Next
   cString:= cString + If(Mod(nSoma, 11) < 2 .or. Mod(nSoma, 11) > 9 , [0], Str(Mod(nSoma, 11), 1))     	

   nSoma := 0
   nFator:= 9
   For i:= Len(cString) To 1 Step -1
       nSoma += Val(SubStr(cString, i, 1)) * nFator
       nFator:= If(nFator == 2, 9, nFator - 1)
   Next
   cString:= cString + If(Mod(nSoma, 11) < 2 .or. Mod(nSoma, 11) > 9 , [0], Str(Mod(nSoma, 11), 1))     	

   cString:= SubStr(cString, 1, 12) + Iif(Val(SubStr(cString, 13, 2)) + 12 > 100, Strzero((Val(SubStr(cString, 13,2)) + 12) - 100, 2, 0), Strzero(Val(SubStr(cString, 13, 2)) + 12, 2, 0))
Return (cString)


Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 14 Jan 2022 15:47
por JoséQuintas
Tá certo isso?
Não bate com o que colocou lá no fórum.

Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 14 Jan 2022 15:50
por malcarli
está funcionando e testado com testador online

Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 14 Jan 2022 16:16
por JoséQuintas
Testou o código do exemplo?
CAEPF1.png
CAEPF2.png
test.prg
(1.42 KiB) Baixado 40 vezes
Essa bate, a sua não.

Cálculo do dígito verificador do caepf – cadastro de ativida

Enviado: 14 Jan 2022 16:18
por JoséQuintas
Não sei de onde tirou isto:

Código: Selecionar todos

cString:= cString + If(Mod(nSoma, 11) < 2 .or. Mod(nSoma, 11) > 9 , [0], Str(Mod(nSoma, 11), 1))