Página 1 de 1
Validação de CEI
Enviado: 10 Ago 2007 01:30
por Maligno
CEI = Cadastro Específico do INSS.
Código: Selecionar todos
//***************************************************************************
function ValidCEI(cCEI)
local nTot := 0
local cAux
local lRet
local i
*
if (lRet := SubStr(cCEI,11,1) $ "0678" .and. Val( Left(cCEI,2 )) > 0 .and.;
Val(SubStr(cCEI,3,3)) > 0 .and.;
Val(SubStr(cCEI,6,5)) > 0 )
for i := 1 to 11
nTot += Val(SubStr(cCEI,i,1)) * Val(SubStr("74185216374",i,1))
next
cAux := Right(Str(nTot,3),2)
nTot := Val(Left(cAux,1)) + Val(Right(cAux,1))
nTot := if(nTot>9, 0, 10-nTot)
lRet := Val(Right(cCEI,1)) = nTot
end
return lRet
Re: Validação de CEI
Enviado: 23 Fev 2010 11:59
por Darth GTB
Tchê...
eu estava precisando deste validador para um programa em FoxPro que estou fazendo, mas achei um pouco confuso teu código pois tu não estás iniciando as variáveis e em meus testes, necessariamente o IF deveria ter um ELSE porque se eu deixasse o lRet inicialmente .F., meus dois exemplos de CEI passavam reto pelo IF e o lRet ficava .F.. Caso eu iniciasse ele como .T., meus exemplos de CEI inválido então passavam reto e o lRet mantinha-se .T.
modifiquei ele um pouco mas isto não me deixou muito confiante... gostaria que se pudesses dar uma olhada no código que fiz para dizer o que achas...
ele encontra-se dentro de uma tela de cadastro de empresas na VALID de um campo chamado m.nu_cei com máscara "99.999.99999/99"
Código: Selecionar todos
PRIVATE nTot, cAux, lRet, i, pNu_cei
nTot = 0
cAux = ""
lRet = .T.
i = 0
pNu_cei = ""
pNu_cei = STRTRAN(m.nu_cei,".")
pNu_cei = STRTRAN(pNu_cei,"/")
IF !EMPTY(pNu_cei)
IF lRet = (SUBSTR(pNu_cei,11,1) $ "0678") AND VAL(LEFT(pNu_cei,2)) > 0 AND;
VAL(SUBSTR(pNu_cei,3,3)) > 0 AND;
VAL(SUBSTR(pNu_cei,6,5)) > 0
FOR i = 1 TO 11
nTot = nTot + VAL(SUBSTR(pNu_cei,i,1)) * VAL(SUBSTR("74185216374",i,1))
ENDFOR
cAux = RIGHT(STR(nTot,3),2)
nTot = VAL(LEFT(cAux,1)) + VAL(RIGHT(cAux,1))
nTot = IIF(nTot>9, 0, 10-nTot)
lRet = IIF(VAL(RIGHT(pNu_cei,1)) = nTot,.T.,.F.)
ELSE
lRet = .F.
ENDIF
IF !lRet
WAIT WINDOW "Codigo CEI incorreto - Tecle <Enter>"
m.nu_cei = " . . / "
* _CUROBJ = OBJNUM(m.nu_cei)
ENDIF
ENDIF
OBS.: o campo pode ficar em branco porque ao invés de CEI a empresa pode ter CNPJ
Obrigado[/color]
Re: Validação de CEI
Enviado: 27 Fev 2010 11:59
por Maligno
Não deixei de inicializar as variáveis. Elas apenas não foram todas inicializadas junto às suas declarações. Muitas vezes faço isso (na linguagem que assim permite) pra economizar código desnecessário, desde que não comprometa a legibilidade.
Da forma que você fez até funciona bem, apesar de haver código redundante. Li sua função e tudo me parece que funcionalmente correto. Acho que você pode confiar.
Mas se quiser outro código diferente, tenho um utilitário simples destinado a validar este e vários outros documentos, feito em C++. Não lembro se é a versão mais recente, mas pode ajudar. A versão mais nova também gera DVs para alguns números de documentos. Se não tiver isso, então é a versão mais antiga. Não posso conferir isso agora. Estou fora da minha base.
http://buzinello.com/pub/tools/valdoc.zip
Re: Validação de CEI
Enviado: 14 Set 2010 13:38
por Programmer
Pessoal,
Para quem está precisando do código para validação de CEI em Visual Basic 6, eis um exemplo:
Código: Selecionar todos
Function valida_CEI(ByVal pCEI As String) As Boolean
Dim nTot As Byte
Dim cAux As String
Dim lRet As Boolean
Dim i As Byte
Dim pNu_cei As String
valida_CEI = False
nTot = 0
cAux = ""
lRet = True
i = 0
pNu_cei = ""
pNu_cei = Trim$(pCEI)
If Len(pNu_cei) < 12 Then
Exit Function
End If
For i = 1 To 11
nTot = nTot + Val(Mid$(pNu_cei, i, 1)) * Val(Mid$("74185216374", i, 1))
Next
cAux = Right$(str(nTot), 2)
nTot = Val(Left$(cAux, 1)) + Val(Right$(cAux, 1))
nTot = IIf(nTot > 9, 0, 10 - nTot)
lRet = IIf(Val(Right$(pNu_cei, 1)) = nTot, True, False)
If lRet = False Then
MsgBox "Codigo CEI incorreto - Tecle <Enter>"
Else
valida_CEI = True
End If
End Function
Sds,