Aí pessoal, acho que o cálculo de dígitos é valido para todos os bancos. Consegui coinstruir a função, porém só posso garantir que a validação é feita com contas que possuem 9 dígitos.
Public Function IsValidCC(sConta As String) As Boolean
On Error GoTo errHandler:
Dim x As Long, s As String
Dim iResult As Integer, sTotal As Long
For x = 1 To Len(sConta) - 1
If IsNumeric(Mid(sConta, x, 1)) Then s = s & Mid(sConta, x, 1)
Next
If Len(s) > 11 Then Exit Function
For x = 0 To Len(Mid(s, 1, 11)) - 1
Select Case 9 - x
Case 9, 8, 7, 6, 5, 4, 3, 2, 1, 0
iResult = iResult + (Mid(Mid(s, 1, 11), Len(Mid(s, 1, 11)) - x, 1) * (9 - x))
Case Else
iResult = iResult + (Mid(Mid(s, 1, 11), Len(Mid(s, 1, 11)) - x, 1) * (9))
End Select
Next
sTotal = Int(iResult / 11)
sTotal = Int(sTotal * 11)
sTotal = iResult - sTotal
If sTotal = 10 Then sTotal = 0
If Right(sConta, 1) = sTotal Then IsValidCC = True
Exit Function
errHandler:
IsValidCC = False
End Function
Sabemos que o dígito pode ser letra ou número, por exemplo o Bradesco, pode ser P,0,,1,2,3,4,5,6,7,8,9 ou o Banco do Brasil pode ser X,0,1,2,3,4,5,6,7,8,9.
O sistema efetua a validação considerando que P ou X = 0, porq na verdade essa substituição pode ser feita.
Para melhorar essa função, conto com a ajuda de vcs!