Validação de CEI

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Validação de CEI

Mensagem 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
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Darth GTB
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 12 Fev 2010 11:32
Localização: Viamão/Porto Alegre - RS

Re: Validação de CEI

Mensagem 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]
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Re: Validação de CEI

Mensagem 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
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Programmer
Usuário Nível 1
Usuário Nível 1
Mensagens: 1
Registrado em: 14 Set 2010 13:30
Localização: Rio de Janeiro/RJ

Re: Validação de CEI

Mensagem 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,
Editado pela última vez por Maligno em 14 Set 2010 14:07, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Responder