PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 25 → WX - Exemplo de Digito Verificador Usando Data Hora, Numero do Celular e Prazo de Expiração
WX - Exemplo de Digito Verificador Usando Data Hora, Numero do Celular e Prazo de Expiração
Débuté par adrianoboller, 07 oct. 2015 18:07 - Aucune réponse
Membre enregistré
3 655 messages
Popularité : +175 (223 votes)
Posté le 07 octobre 2015 - 18:07
Prezados,

Finalidade é checar esse digito com o digito verificador do servidor... ai a finalidade é por conta e risco de cada um... basta usar a criatividade e melhor esse exekmplo. O mesmo funciona perfeitamente!...

Procedure DigitoVerificador(LOCAL DDD is string, LOCAL TEL is string, LOCAL Data is string, LOCAL Hora is string, LOCAL DebugSN)

ChangeCharset(charsetOccidental) // SEM ACENTO

//VARIAVEIS
CodigoValidacao, RestoDiv, DIA, MES is string
n0,n1,n2,n3,n4,n5,n6,n7,n8,n9, n10, n11, n12 is real = 0
Total, Resultado, Digito, iDDDxiTEL, iDDD, iTEL, DIVIDENDO, DIVISOR is real = 0

IF DDD <> "" AND TELcliente <> "" AND Data <> "" AND Hora <> "" THEN

IF Data = "" AND Hora = "" OR Data = 0 AND Hora = 0

//Data
Data = DateSys() //20130816

//DIA MES ANO
DIA = Middle(Data,7,2)
IF Length(DIA) = 1 THEN
DIA = "0"+DIA
END
MES = Middle(Data,5,2)
IF Length(MES) = 1 THEN
MES = "0"+MES
END
Data = Middle(Data,7,2) +""+ Middle(Data,5,2) +""+ Middle(Data,1,4)

//Hora e minuto - 123654
Hora = TimeSys()

Hora = Middle(Hora,1,4)

END

//Calculos
GloDataHora = Val(Data +""+ Hora) //160820131142 = 16/08/2013 11:42

IF DebugSN = "S"
Info(GloDataHora)
END


//Produto do ddd com o telefone
iDDD = DDD
iTEL = TELcliente
iDDDxiTEL = Val(Val(iDDD) * Val(iTEL))
IF DebugSN = "S"
Info(iDDDxiTEL)
END

//MODULO
DIVIDENDO = GloDataHora
DIVISOR = iDDDxiTEL
IF iDDDxiTEL > 0 //Divisor tem que ser maior que zero THEN
RestoDiv = Modulo(DIVIDENDO,DIVISOR) // resto da div modulo()
END

IF DebugSN = "S"
Info("RestoDiv",RestoDiv,GloDataHora,iDDDxiTEL)
END

//20131209T120040
GloDataHora = Middle(DateSys(),1,4) +"-"+ Middle(DateSys(),5,2) +"-"+ Middle(DateSys(),7,2) +"T"+ Middle(TimeSys(),1,2) +":"+ Middle(TimeSys(),3,2) +":"+ Middle(TimeSys(),5,2)

IF Length(RestoDiv) = 7 THEN
RestoDiv = "00000"+RestoDiv
ELSE IF Length(RestoDiv) = 8 THEN
RestoDiv = "0000"+RestoDiv
ELSE IF Length(RestoDiv) = 9 THEN
RestoDiv = "000"+RestoDiv
ELSE IF Length(RestoDiv) = 10 THEN
RestoDiv = "00"+RestoDiv
ELSE IF Length(RestoDiv) = 11 THEN
RestoDiv = "0"+RestoDiv
ELSE IF Length(RestoDiv) = 12 THEN
RestoDiv = RestoDiv
END


//Digito Verificador
n12 = Val(Middle(RestoDiv,13,1)) * 1
n11 = Val(Middle(RestoDiv,12,1)) * 9
n10 = Val(Middle(RestoDiv,11,1)) * 8
n9 = Val(Middle(RestoDiv,10,1)) * 7
n8 = Val(Middle(RestoDiv,09,1)) * 6
n7 = Val(Middle(RestoDiv,08,1)) * 5
n6 = Val(Middle(RestoDiv,07,1)) * 4
n5 = Val(Middle(RestoDiv,06,1)) * 3
n4 = Val(Middle(RestoDiv,05,1)) * 2
n3 = Val(Middle(RestoDiv,04,1)) * 1
n2 = Val(Middle(RestoDiv,03,1)) * 9
n1 = Val(Middle(RestoDiv,02,1)) * 8
n0 = Val(Middle(RestoDiv,01,1)) * 7

Total = n0+n1+n2+n3+n4+n5+n6+n7+n8+n9+n10+n11+n12


IF DebugSN = "S"
Info("Total",Total, n0+";"+n1+";"+n2+";"+n3+";"+n4+";"+n5+";"+n6+";"+n7+";"+n8+";"+n9+";"+n10+";"+n11+";"+n12)
END

IF Total > 0
Resultado = Modulo(Total,11)
END

IF DebugSN = "S"
Info("Modulo 11",Resultado)
END

IF Resultado > 9 THEN
Digito = 0
ELSE
Digito = Resultado
END

CodigoValidacao = Total +""+ Digito

IF DebugSN = "S"
Info("CodigoValidacao", CodigoValidacao, Total, Digito)
END

END

RESULT(CodigoValidacao)


--
Adriano Jose Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 9949 1800
adrianoboller@gmail.com
skype: adrianoboller
______________________________________________