//****************************************************************
static function Modulo10(cTst)
local nTot := 0
local nAux
local i
if Len(ctST)%2 != 0
cTst := "0"+cTst
end
for i := 1 to Len(cTst)
nAux := Val(SubStr(cTst,i,1)) * if(i%2==0,2,1)
if nAux >= 10
nAux := Val(Left(Str(nAux,2),1)) + Val(Right(Str(nAux,2),1))
end
nTot += nAux
next
nTot := 10-(nTot%10)
return if(nTot=10, "0", Str(nTot,1))
//****************************************************************
function ValidCMC7(cCMC7)
return Modulo10(SubStr(cCMC7, 1, 7)) == SubStr(cCMC7,19,1) .and. ;
Modulo10(SubStr(cCMC7, 9,10)) == SubStr(cCMC7, 8,1) .and. ;
Modulo10(SubStr(cCMC7,20,10)) == SubStr(cCMC7,30,1)
/*
DÃgitos Descrição
------- ---------------------------------------
1/3 Número do banco
4/7 Número da agência
8 Módulo 10 dos dÃgitos 9 a 18
9/11 Código de compensação
12/17 Número do cheque
18 Número fixo (5)
19 Módulo 10 dos dÃgitos 1 a 7
20/29 Número da conta corrente (incluindo DV)
30 Módulo 10 dos dÃgitos 20 a 29
*/