Вы находитесь на странице: 1из 2

muito comum, aos programadores novatos do Grupo, sempre procurarem

por rotinas como verificar se um CGC vlido ou no. Por isso, escrevi essa
pequena rotina, que tem exatamente a funo de checar se o CGC vlido
ou no, retornando um valor falso (.F.) ou verdadeiro (.T.), sendo falso
para o caso de o CGC ser invlido e verdadeiro para o caso de ser vlido.

Coloque essa rotina no seu arquivos de PROCEDURE principal, para evitar
duplicao de cdigo no seu programa.

Para usar a rotina, basta voc fazer uma checagem da seguinte forma:

[code:1:2e2efe62da]
IF CHKCPF (.cgc) && CGC Vlido
ELSE && CGC Invlido. Trate o Erro
WAIT WINDOW 'CGC invlido'
ENDIF
Segue ento, a rotina escrita em cdigo FoxPro

*-----------------------------------------------------------------------------
* FUNCAO....: CHKCGC ()
* AUTOR.....: NILTON PAULINO DA SILVA - GOIANIA-GOIAS
* OBJETIVO..: Fazer checagem de CGC.
* RETORNO...: Retorna .T. se for correto ou .F. se for errado o n do CGC
*-----------------------------------------------------------------------------
FUNCTION CHKCGC
PARAMETERS num_cgc
m.d_1 = 0
m.d_4 = 0
m.x_x = 1
FOR m.conta = 1 TO LEN (num_cgc) - 2
IF AT (SUBS (num_cgc,m.conta,1),"/-.") = 0
m.d_1 = m.d_1 + VAL (SUBS( num_cgc, m.conta, 1)) * (IIF( m.x_x < 5, 6,
14) - m.x_x)
m.d_4 = m.d_4 + VAL (SUBS( num_cgc, m.conta, 1)) * (IIF( m.x_x < 6, 7,
15) - m.x_x)
m.x_x = m.x_x + 1
ENDIF
NEXT
m.resto = m.d_1 - (INT( m.d_1 / 11 ) * 11)
m.digito = IIF (m.resto < 2, 0, 11 - m.resto)
m.d_4 = m.d_4 + 2 * m.digito
m.resto = m.d_4 - (INT( m.d_4 / 11 ) * 11)
m.digito = VAL( STR( m.digito, 1 ) + STR( IIF( m.resto < 2, 0, 11 - m.resto
), 1 ))
IF m.digito != VAL( SUBS( num_cgc, LEN ( num_cgc ) - 1, 2 ))
RETURN .F.
ELSE
RETURN .T.
ENDIF
*-----------------------------------------------------------------------------
[/code:1:2e2efe62da]

Вам также может понравиться