Função ficou maluca (ou eu)
Olá pessoa,
Estou com um problema, aparentemente, muito simples, mas depois de olhar trocentas vezes para o código e printar todas as linhas (rs) já não se enxerga mais nada...
Bem, fiz a função para calcular o digito verificador da chave ASBACE (aquela dos boletos) de acordo com o código do banco BANESTES, ocorre que está tudo correto, mas na última linha ao invés de retornar 6, retorna 0. O pior, até coloquei um response que me mostra que o D2 final é 6, mas essa linha é printada novamente e troca para zero... não estou conseguindo entender...
Function CalculaD2(chave, D1)
D2 = 0
peso = 7
P = 0
S = 0
chaveD1 = chave & D1
w "<hr><br>Entrando no calculo D2...<br><br>chaved1...: "& chr(11) & chaved1
w "<br>D1......:" & D1
w "<br>D2......:" & d2
For i = 1 to Len(chaveD1) Step 1
N = cint(mid(chaveD1,i, 1))
P = N * (peso)
' atençaõ redobrada aqui:
' como a expressao original era: P = N * peso--
' se eu fazia
' N* (peso-1) ou
' se fazia a conta primeiro: peso = peso -1 e depois jogar N * peso, também dava erro, e o motivo, fui entender com o javascript
' onde a precedência do operador ([http://www.vbsedit.com/html/49eaf4cf-8818-478d-a429-cdd2ece20811.asp](http://www.vbsedit.com/html/49eaf4cf-8818-478d-a429-cdd2ece20811.asp)).
' Nesse caso o -- estava depois de peso, portanto, deveria ser feito a conta e depois decrementado
' então passe a N* peso e depois peso=peso-1, e funcionou
'
peso = peso -1
S = S + P
if peso = 1 then
peso = 7
end if
Next
w "<br>Soma..............: " & chr(11) & S
resto = S mod 11
'response.write "<br>D1-----: " & D1
w "<br>" & S & "/11....: " & chr(11) & resto
w "<br>testa o valor do RESTO...................................."
if (resto = 0) then
w "<br>Resto = 0"
D2 = 0
elseif (resto = 1) then
w "<br>Resto = 1..................................................."
response.write "<br><br>resto = 1 --> recalcula..."
response.write "<br>D1 Atual....: " & d1
D1 = D1 + 1
response.write "<br>D1 + 1....: " & d1
if (D1 = 10) then D1 = 0 end if
response.write "<br>D1 + enviado para recalculo....: " & d1
CalculaD2 chave, D1
elseif (resto > 1) then
w "<br>Resto > 1"
D2 = 11 - resto
d3 = D2
end if
w "<br>d2 final...." & D2
CalculaD2 = D2
End function
Para testar, passem o valor da chave (14000006000065971322021) e o valor de D1(9)... se der tudo certo, na primeira passagem, vai dar 1, então irá recalcular, e o valor final tem que ser 6.
Se alguém puder ajudar, agradeço antecipadamente...
No meu debug, aparece assim:
Entrando no calculo D2...
chaved1...: 140000060000659713220219
D1......:9
D2......:0
Soma..............: 276
276/11....: 1
testa o valor do RESTO....................................
Resto = 1...................................................
resto = 1 --> recalcula...
D1 Atual....: 9
D1 + 1....: 10
D1 + enviado para recalculo....: 0
Entrando no calculo D2...
chaved1...: 140000060000659713220210
D1......:0
D2......:0
Soma..............: 258
258/11....: 5
testa o valor do RESTO....................................
Resto > 1
d2 final....6
d2 final....0
O que não estou entendendo são as duas últimas linhas, era para aparecer apenas a que contém o número 6
sds
Discussão (3)
Carregando comentários...