CALCULO DOS CAMPO C1 NOS CHEQUES
Boa tarde, estou tentando fazer o calcuclo do campo C1 que tem nos cheques, mas está me retornando um nº totalmente diferente do tem que ser. Abaixo o código que estou utilizando:
Function DigitoVerificador1(C_1 As String)
Dim A1 As Integer, A2 As Integer, A3 As Integer, A4 As Integer, A5 As Integer
Dim A6 As Integer, A7 As Integer, A8 As Integer, A9 As Integer, A10 As Integer
Dim Tot1Dv As Integer, Tot2Dv As Integer
A1 = Val(Mid(C_1, 1, 1)) * 11
A2 = Val(Mid(C_1, 2, 1)) * 10
A3 = Val(Mid(C_1, 3, 1)) * 9
A4 = Val(Mid(C_1, 4, 1)) * 8
A5 = Val(Mid(C_1, 5, 1)) * 7
A6 = Val(Mid(C_1, 6, 1)) * 6
A7 = Val(Mid(C_1, 7, 1)) * 5
A8 = Val(Mid(C_1, 8, 1)) * 4
A9 = Val(Mid(C_1, 9, 1)) * 3
A10 = Val(Mid(C_1, 10, 1)) * 2
Tot1Dv = ((A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10) Mod 11)
Tot2Dv = 11 - Tot1Dv
If Tot2Dv >= 10 Then
Tot2Dv = 0
End If
DigitoVerificador1 = Tot2Dv
End Function
Chamando função
Txt_Banda04.Text = DigitoVerificador1(Txt_Banda01.Text & Txt_Banda02.Text & Txt_Banda03.Text)
onde:
Txt_Banda01.Text = 033 -> Nº da Compensação
Txt_Banda02.Text = 237 -> Nº do Banco
Txt_Banda03.Text = 3421 -> Nº da Agencia
O resultado do C1 deveria de ser 3 mas me retorna 0
Não sei o que está de errado. Se tiver alguém que pode me dar uma ajudinha neste código ficarei grato.
Obrigado.
Function DigitoVerificador1(C_1 As String)
Dim A1 As Integer, A2 As Integer, A3 As Integer, A4 As Integer, A5 As Integer
Dim A6 As Integer, A7 As Integer, A8 As Integer, A9 As Integer, A10 As Integer
Dim Tot1Dv As Integer, Tot2Dv As Integer
A1 = Val(Mid(C_1, 1, 1)) * 11
A2 = Val(Mid(C_1, 2, 1)) * 10
A3 = Val(Mid(C_1, 3, 1)) * 9
A4 = Val(Mid(C_1, 4, 1)) * 8
A5 = Val(Mid(C_1, 5, 1)) * 7
A6 = Val(Mid(C_1, 6, 1)) * 6
A7 = Val(Mid(C_1, 7, 1)) * 5
A8 = Val(Mid(C_1, 8, 1)) * 4
A9 = Val(Mid(C_1, 9, 1)) * 3
A10 = Val(Mid(C_1, 10, 1)) * 2
Tot1Dv = ((A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10) Mod 11)
Tot2Dv = 11 - Tot1Dv
If Tot2Dv >= 10 Then
Tot2Dv = 0
End If
DigitoVerificador1 = Tot2Dv
End Function
Chamando função
Txt_Banda04.Text = DigitoVerificador1(Txt_Banda01.Text & Txt_Banda02.Text & Txt_Banda03.Text)
onde:
Txt_Banda01.Text = 033 -> Nº da Compensação
Txt_Banda02.Text = 237 -> Nº do Banco
Txt_Banda03.Text = 3421 -> Nº da Agencia
O resultado do C1 deveria de ser 3 mas me retorna 0
Não sei o que está de errado. Se tiver alguém que pode me dar uma ajudinha neste código ficarei grato.
Obrigado.
Eu utilizo as funções abaixo
espero ter ajudado.
Public Function ValidarCMC7(ByVal Numero As String) As Boolean
Dim b1 As Boolean, b2 As Boolean, b3 As Boolean
Dim c1 As String, c2 As String, c3 As String
Dim d1 As String, d2 As String, d3 As String
c1 = Mid$(Numero, 1, 7)
c2 = Mid$(Numero, 9, 10)
c3 = Mid$(Numero, 20, 10)
d1 = Mid$(Numero, 19, 1)
d2 = Mid$(Numero, 8, 1)
d3 = Mid$(Numero, 30, 1)
b1 = (DVBase10(c1) = d1)
b2 = (DVBase10(c2) = d2)
b3 = (DVBase10(c3) = d3)
ValidarCMC7 = b1 And b2 And b3
End Function
Private Function DVBase10(ByVal Codigo As String) As Integer
Dim bFlag As Boolean
Dim i As Integer
Dim DV As Long
Dim dig As Integer
DV = 0
bFlag = True
For i = Len(Codigo) To 1 Step -1
If bFlag Then
dig = CInt(Mid$(Codigo, i, 1)) * 2
Else
dig = CInt(Mid$(Codigo, i, 1))
End If
bFlag = Not bFlag
If dig > 9 Then
dig = 1 + (dig - 10)
DV = DV + dig
Else
DV = DV + dig
End If
Next
dig = 10 * ((DV / 10) - Int(DV / 10))
If dig > 0 Then dig = 10 - dig
DVBase10 = dig
End Function
espero ter ajudado.
Couto - como vc utiliza esta função??
Estou fazendo assim mas está dando erro:
Txt_Banda04.Text = ValidarCMC7(Txt_Banda01.Text & Txt_Banda02.Text & Txt_Banda03.Text)
Estou errado??
Estou fazendo assim mas está dando erro:
Txt_Banda04.Text = ValidarCMC7(Txt_Banda01.Text & Txt_Banda02.Text & Txt_Banda03.Text)
Estou errado??
Tenta ai
Function DigitoVerificador_C1(Comp As String, Banco As String, Agencia As String) As Integer
Dim A(10) As Integer
Dim Resto As Integer
Dim C_1 As String
Dim SOMA As Integer
C_1 = Comp & Banco & Agencia
For F = 0 To 9
A(F + 1) = CInt(Mid(C_1, F + 1, 1)) * (11 - F)
Next F
SOMA = A(1) + A(2) + A(3) + A(4) + A(5) + A(6) + A(7) + A(8) + A(9) + A(10)
Resto = SOMA Mod 11
DigitoVerificador_C1 = 11 - Resto
If DigitoVerificador_C1 = 1 Then
DigitoVerificador_C1 = 0
End If
End Function
Private Sub Command2_Click()
MsgBox DigitoVerificador_C1([Ô]033[Ô], [Ô]237[Ô], [Ô]3241[Ô])
End Sub
Elmo,
Agora que eu vi. Você quer apenas validar parte do código. A função que eu postei valida todo o código CMC7.
Agora que eu vi. Você quer apenas validar parte do código. A função que eu postei valida todo o código CMC7.
Couto o que eu quero é que me retorne os valores para C1, C2 e C3 conforme está no cheque
Marcelo - a sua função está quase dando certo, só que o resultado ainda continua dando 0 e tem que dar 3. O erro na sua função é que na agencia voce trocou um numero de lugar [Ô]3241[Ô] neste caso está dando certo, mas o nº da agencia certo é [Ô]3421[Ô], assim me retorna sempre 0 e não 3 como está no cheque.
Elmo,
creio que você pode utilizar a minha função para calcular o C1, C2 e C3 separadamente. Observe que dentro da função ValidarCMC7 há um divisão das partes para os campos.
No meu ver você está utilizando o cálculo do DV para base 11 e eu estou usando na base 10
Tente o seguinte:
qualquer dúvida estamos para ajudar.
creio que você pode utilizar a minha função para calcular o C1, C2 e C3 separadamente. Observe que dentro da função ValidarCMC7 há um divisão das partes para os campos.
No meu ver você está utilizando o cálculo do DV para base 11 e eu estou usando na base 10
Tente o seguinte:
Txt_Banda04.Text = DVBase10(Txt_Banda01.Text & Txt_Banda02.Text & Txt_Banda03.Text)
qualquer dúvida estamos para ajudar.
Couto - já consegui fazer o C2 e C3, só está faltando C1, espero que até o final do dia consiga fazê-lo, agora resta saber se isto funciona para tipo de cheques de bacos diferente.
Tópico encerrado , respostas não são mais permitidas