CheckCGCCPF ( Source)
(STRING PNumero,
Dentro de Processd Code
IF ~OMITTED(2) THEN
IF PTipo THEN
IF LEN(CLIP(PNUMERO)) = 18 THEN
PNUMERO = DEFORMAT(CLIP(PNUMERO),@P##.###.###/####-##P)
DO CheckCGC
ELSIF LEN(CLIP(PNUMERO)) = 14 THEN
PNUMERO = DEFORMAT(CLIP(PNUMERO),@P###.###.###-##P)
DO CheckCPF
.
ELSE
IF LEN(CLIP(PNUMERO)) = 14 THEN
DO CheckCGC
ELSIF LEN(CLIP(PNUMERO)) = 11 THEN
DO CheckCPF
.
.
ELSE
IF LEN(CLIP(PNUMERO)) = 14 THEN
DO CheckCGC
ELSIF LEN(CLIP(PNUMERO)) = 11 THEN
DO CheckCPF
.
.
RETURN(3)
CheckCGC ROUTINE
LOC:NumCheck = '543298765432'
LOC:Cgc = All('0',14 - Len(Clip(PNUMERO))) & PNUMERO
Loop j# = 1 to 2
Clear(Soma#)
Loop i# = 1 to 12
Soma# += (LOC:Cgc[i#] * LOC:NumCheck[i#])
.
If j# = 2 Then
Soma# += 2 * Digito#
.
Digito# = (10 * Soma#) % 11
If Digito# = 10 Then
Digito# = 0
.
LOC:Controle = Clip(LOC:Controle) & Digito#
LOC:NumCheck = '654329876543'
.
If (LOC:Controle = LOC:Cgc[13:14] Or PNUMERO = 0)
Return(1)
Else
Return(0)
End
CheckCPF ROUTINE
LOC:ParCic = All('0',11 - Len(Clip(PNUMERO))) & PNUMERO
LOC:Cic = LOC:ParCic[1:3] & LOC:ParCic[4:6] & LOC:ParCic[7:9]
LOC:Dig = LOC:ParCic[10:11]
Loop j# = 1 to 2
Clear(Soma#)
Loop i# = 1 To (8 + J#)
Soma# += (((10 + j#) - i#) * LOC:Cic[i#])
.
Digito# = (10 * Soma#) % 11
If Digito# = 10 Then
Digito# = 0
.
LOC:Controle = Clip(LOC:Controle) & Digito#
LOC:Cic = Clip(LOC:Cic) & LOC:Controle
End
If (LOC:Controle = LOC:Dig Or PNUMERO = 0)
Return(2)
Else
Return(0)
End
Dentro de Data Section
LOC:Controle String(02)
LOC:NumCheck String(12)
LOC:cgc String(14)
LOC:ParCic String(11)
LOC:Cic String(11)
LOC:Dig String(02)
Testar
If CGC THEN
i# = CheckCGCCPF(CGC, 1)
if i# = 0 then
select(?CGC)
MESSAGE('Número do documento CGC/CPF é inválido.','Aviso!')
ELSif i# = 1 then
select(?CGC)
MESSAGE('Número do documento CGC esta OK.','Aviso!')
ELSif i# = 2 then
select(?CGC)
MESSAGE('Número do documento CPF esta OK.','Aviso!')
elsif i# = 3 then
select(?CGC)
MESSAGE('Impossível distinguir o número do CGC/CPF digitado.|Fomatos válidos: 99.999.999/9999-99 para CGC ou 999.999.999-99 para CPF','Aviso!')
.
End