Referências Multibanco
Estrutura das referências Multibanco
As referências Multibanco são compostas por 9 dígitos numéricos:
os 7 dígitos da esquerda são para ser usados pelo cliente sequencialmente
os 2 dígitos da direita, têm de ser calculado sempre que é gerada uma referência com base no código da entidade lusopay, na chamados Check-digit (CD).
Ref: n n n n n n n C D
Quando um cliente subscreve um pacote de referências, a lusopay disponibiliza um intervalo de com limites superior e inferior de acordo com o tamanho do pacote contratado.
Exemplo para um pacote de 100 referências:
Limite inferior: 3 4 3 3 1 5 0
Limite superior: 3 4 3 3 2 4 9
As referências geradas irão estar no intervalo 3433150CD a 3422349CD (100 referências).
Para cada referência neste intervalo é calculado o respetivo check-digit.
Ex: 3 4 3 3 1 5 0 8 6, onde 86 é o check-digit
Cálculo do check-digit Multibanco
Para o cálculo do check-digit são necessárias as seguintes variáveis:
ent – código de 5 dígitos da entidade (11024)
ref7 – referência (7 dígitos) a usar valor – valor com duas casas decimais
Função de cálculoval = Right(10000000000000# + valor * 100, 8) (retira as decimais e apenas considera 8 dígitos) var = ent & ref7 & valsize = Len(var)For x = 1 To sizechar = Mid(var, x, 1)varx = (varx + char) * 10 Mod 97Nextckdg = 98 - ((varx * 10) Mod 97)If ckdg < 10 Thenckdg = Right(ckdg + 100, 2)End Ifref = Format(ref7 & ckdg, "@@@ @@@ @@@")Exemplo de código em VBPublic Shared Function GeraModulo97_10(ByVal Input As String) As String If Not IsNumeric(Input) Then Return NOT_NUMERICDim Pesos As Integer() = {1, 10, 3, 30, 9, 90, 27, 76, 81, 34, 49,5, 50, 15, 53, 45, 62, 38, 89, 17, 73, 51, 25, 56, 75, 71, 31, 19,93, 57}Dim cd As Integer = 0Dim Digitos As Byte() = ParseInput(Input)For i As Integer = 0 To Digitos.Length - 1 cd += Digitos(i) * Pesos(i + 2)Next iIf CStr(98 - (cd Mod 97)).Length() = 1 Then Return "0" & 98 - (cd Mod 97)ElseReturn 98 - (cd Mod 97)End If End FunctionPrivate Shared Function ParseInput(ByVal Input As String) As Byte() If Not IsNumeric(Input) Then Return NothingDim a(Input.Length - 1) As Byte Dim i As Integer = 0For i = 0 To Input.Length - 1a(Input.Length - 1 - i) = Long.Parse(Input(i).ToString())Next Return aEnd Function