Saltar para o conteúdo principal
Lusopay

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

Referências Payshop

Estrutura das referências Payshop

A orientação é semelhante às referências Multibanco, com a diferença no número de dígitos da referência e fórmula de cálculo do check-digit.

Estrutura da referência Payshop: 62090087RRRRRRRRRRVVVVVVV0000000AAMMDD000000000C

É composta por:

  • 62090087, inicio fixo

  • RRRRRRRRRR, referência com 10 dígitos. Associada a um pagador, dentro da gama atribuída pela lusopay

  • VVVVVVV, valor com 7 dígitos, sem casas decimais; ex.: 10,99€ -> 0001099

  • 0000000, fixo

  • AAMMDD, data de validade do pagamento, no formato aa-MM-dd; ex.: 25-09-2011 -> 110925

  • 000000000, fixo

Exemplo para um pacote de 100 referências:

Limite inferior: 1 0 0 3 4 3 3 1 5 0

Limite superior: 1 0 0 3 4 3 3 2 4 9

Cálculo do check-digit Payshop

Algoritmo de Luhn:

  • Contando do dígito mais à direita para a esquerda .

  • Multiplicar cada dígito em posição ímpar por 2. Se o resultado for maior que 9, então subtrair 9.

  • Multiplicar cada dígito em posição por por 1.

  • Calcular a soma dos produtos anteriores.

  • O check digit de Luhn é o número que adicionado à soma torna o resultado múltiplo de 10. Exemplo com código de entidade 12345 e referência do pagamento 1234567:

1

2

3

4

5

1

2

3

4

5

6

7

x

1

2

1

2

1

2

1

2

1

2

1

2

=

1

4

3

8

5

2

2

6

4

10

6

14

-9

1

4

3

8

5

2

2

6

4

1

6

5

□

47

CD

3

Exemplos

vb

Referência para o cliente: 1234512345673

Public Shared Function GeraCDPayShop(ByVal Input As String) As String Dim nextTen As Integer
Dim sum As Integer = 0
Dim alternate As Integer = 0 Dim digit As Integer = 0
If Not IsNumeric(Input) Then Return NOT_NUMERIC For i As Integer = Input.Length - 1 To 0 Step -1
If alternate = 0 Then
digit = (Val(Input(i))) * 2 alternate = 1
Else
digit = (Val(Input(i))) * 1 alternate = 0
End If
If (digit > 9) Then digit -= 9 sum += digit
Next
nextTen = sum
While nextTen Mod 10 <> 0
nextTen += 1 End While
Return nextTen - sum End Function