🇵🇪Peru
Check the requirements and validations made over the cashouts on Peru
Required fields
Field
Format
Description
login
String
Cashouts login
pass
String
Cashouts pass
external_id
String (max length: 100)
Transaction's ID on your end
amount
Number with up to 2 decimals
Cashout amount
beneficiary_name
String (max length: 100)
Beneficiary's name
beneficiary_lastname
String (max length: 100)
Beneficiary's last name
Bank Account Validations
Bank name
Bank code
Description
Format
Example
All
-
CCI - Código de Cuenta Interbancaria
Length 20 (with verifying digits - a validation algorithm is ran over these)
00219300153895206813
CCI validation algorithm
Since the first three digits of the CCI are the bank code, it is not mandatory to send the bank_code
field. However, we validate those 3 first digits to be a valid bank_code
.
public final class Validations {
static Integer CCI_LENGTH_ST = 18;
static Integer CCI_LENGTH_FST = 20;
static String EMPTY_CHECK_DIGITS = "00";
public static boolean validateBankAccount(String bankAccount) {
if (!ValidationsUtils.validateOnlyNumbers(bankAccount)) {
return false;
} else {
int accountLength = bankAccount.length();
String lastDigits = bankAccount.substring(bankAccount.length() - 2);
if (accountLength == CCI_LENGTH_ST && lastDigits.equals(EMPTY_CHECK_DIGITS)) {
return true;
}
return validateCCI(bankAccount);
}
}
//Validate CCI bank account
public static boolean validateCCI(String cci) {
if (validateCCILength(cci)) {
String cciWithoutCheck = cci.substring(0, cci.length() - 2);
String checkDigits = cci.substring(cci.length() - 2);
String calculatedCheckDigits = getCciCheckDigits(cciWithoutCheck);
return checkDigits.equals(calculatedCheckDigits);
}
return false;
}
public static boolean validateCCILength(String cci) {
return cci.length() == CCI_LENGTH_FST;
}
public static String getCciCheckDigits(String cci) {
int firstControlNumber = calculateCheckDigit(cci.substring(0, 6));
int secondControlNumber = calculateCheckDigit(cci.substring(6, 18));
return String.valueOf(firstControlNumber) + String.valueOf(secondControlNumber);
}
private static int calculateCheckDigit(String cci) {
int total = 0;
int factor = 1;
for (int i = 0; i < cci.length(); i++) {
String[] cciArray = cci.split("");
int num = Integer.parseInt(cciArray[i]);
if (num * factor < 10) {
total += (num * factor);
} else {
int product = (num * factor);
String product_str = Integer.toString(product);
int firstDigit = Integer.parseInt(product_str.substring(0, 1));
int lastDigit = product % 10;
total += firstDigit + lastDigit;
}
factor = factor == 1 ? 2 : 1;
}
return (total % 10) > 0 ? 10 - (total % 10) : 0;
}
}
Account Types
The account_type
is specified with only one character as described below.
account_type
Description
C
Checkings account
S
Savings account
M
Master account
Document Validations
Click here to check document types and validations.
Example Request
{
"login": "xxxxxxx",
"pass": "xxxxxxx",
"external_id": "30000000001",
"country": "PE",
"currency": "PEN",
"amount": 100,
"document_id": "848392783",
"document_type": "CE",
"bank_account": "00219300153895206813",
"account_type": "C",
"beneficiary_name": "User",
"beneficiary_lastname": "Test",
"notification_url": "https://webhook.site/url",
"type": "json"
}
Bank Codes
Bank
Code
Banco de Crédito del Peru
002
Interbank
003
Citibank
007
Scotiabank
009
BBVA Continental
011
Banco de la Nación
018
Banco de Comercio
023
Banco Financiero
035
Banco Interamericano de Finanzas (BIF)
038
Crediscotia Financiera
043
Mi Banco
049
Banco GNB Peru S.A
053
Banco Falabella
054
Santander
056
Caja Metropolitana de Lima
800
Caja Municipal de Ahorro y Credito Piura SAC
801
Caja Municipal de Ahorro y Crédito Trujillo
802
Caja Municipal de Ahorro y Crédito Arequipa
803
Caja Municipal de Ahorro y Crédito Sullana
805
Caja Municipal de Ahorro y Crédito Cuzco
806
Caja Municipal de Ahorro y Crédito Huancayo
808
Last updated
Was this helpful?