CALCULO DOS CAMPO C1 NOS CHEQUES

ELMO01 02/12/2010 14:31:54
#358639
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.

FFCOUTO 02/12/2010 14:51:48
#358640
Resposta escolhida
Eu utilizo as funções abaixo

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.
ELMO01 02/12/2010 15:29:08
#358645
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??
MARCELO.TREZE 02/12/2010 17:06:08
#358649
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
FFCOUTO 03/12/2010 09:31:11
#358696
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.
ELMO01 03/12/2010 09:58:10
#358701
Couto o que eu quero é que me retorne os valores para C1, C2 e C3 conforme está no cheque
ELMO01 03/12/2010 11:04:52
#358709
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.
FFCOUTO 03/12/2010 17:50:49
#358755
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:

Txt_Banda04.Text = DVBase10(Txt_Banda01.Text & Txt_Banda02.Text & Txt_Banda03.Text)


qualquer dúvida estamos para ajudar.
ELMO01 06/12/2010 08:36:51
#358875
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