Saltar para o conteúdo principal
Lusopay

Voltar aos manuais / Geração offline de referências Multibanco e Payshop

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álculo
val = Right(10000000000000# + valor * 100, 8) (retira as decimais e apenas considera 8 dígitos) var = ent & ref7 & val
size = Len(var)
For x = 1 To size
char = Mid(var, x, 1)
varx = (varx + char) * 10 Mod 97
Next
ckdg = 98 - ((varx * 10) Mod 97)
If ckdg < 10 Then
ckdg = Right(ckdg + 100, 2)
End If
ref = Format(ref7 & ckdg, "@@@ @@@ @@@")
Exemplo de código em VB
Public Shared Function GeraModulo97_10(ByVal Input As String) As String If Not IsNumeric(Input) Then Return NOT_NUMERIC
Dim 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 = 0
Dim Digitos As Byte() = ParseInput(Input)
For i As Integer = 0 To Digitos.Length - 1 cd += Digitos(i) * Pesos(i + 2)
Next i
If CStr(98 - (cd Mod 97)).Length() = 1 Then Return "0" & 98 - (cd Mod 97)
Else
Return 98 - (cd Mod 97)
End If End Function
Private Shared Function ParseInput(ByVal Input As String) As Byte() If Not IsNumeric(Input) Then Return Nothing
Dim a(Input.Length - 1) As Byte Dim i As Integer = 0
For i = 0 To Input.Length - 1
a(Input.Length - 1 - i) = Long.Parse(Input(i).ToString())
Next Return a
End Function

Exemplos

txt

Exemplos de referências para a Entidade 11024

- Ref: 1127205
- Valor: 382,66
- Input: 11024112720538266

CheckDigit: 98

Referência completa: 112720598