gerador-br
Version:
Gerador de Dados Fictícios - Brasil
153 lines (138 loc) • 4.85 kB
JavaScript
;
var nome = require('./nome.cjs');
const creditCard = {
generate(mask, fullTitularName) {
const arr = this.banner().number;
const brand = this.banner().brandName;
const length = 16 - arr.length;
for (let i = 1; i < length; i++) {
arr.push(Math.round(Math.random() * 9));
}
let sum = 0;
let aux = true;
let ninesOut = 0;
arr.forEach((value) => {
ninesOut = Number(value) * (aux ? 2 : 1); // false = 1 vs true = 2
ninesOut = ninesOut > 9 ? ninesOut - 9 : ninesOut;
sum += ninesOut;
aux = !aux;
ninesOut = 0;
});
let digit = 10 - (sum % 10);
if (digit === 10) {
digit = 0;
}
const numberCard = mask ? arr.join('').replace(/(.{4})/g, '$1 ') + digit : arr.join('') + digit;
const creditCardData = {
numero: numberCard,
bandeira: brand,
cvv: this.cvv(),
dataExpiracao: this.expirationDate(),
nomeTitular: this.titularName(fullTitularName),
};
return creditCardData;
},
banner() {
const brandCodes = {
discover: [6011, 622, 65],
elo: [636368, 438935, 504175, 451416],
jcb: [35],
mastercard: [51, 52, 53, 54, 55],
visa: [4],
};
const arrNumber = [];
for (const brand in brandCodes) {
brandCodes[brand].forEach((value) => arrNumber.push({ number: value, brand }));
}
const selectedEntry = arrNumber[Math.floor(Math.random() * arrNumber.length)];
const number = selectedEntry.number.toString().split('').map(Number);
const brandName = selectedEntry.brand;
return { number, brandName };
},
cvv() {
const random = Math.floor(Math.random() * 999) + 1;
const cvv = `00${random.toString()}`;
return cvv.substr(cvv.length - 3);
},
expirationDate() {
const getRandomInt = (min, max) => Math.floor(Math.random() * (max - min + 1)) + min;
const getRandomMonth = () => getRandomInt(1, 12);
const getRandomDay = (month) => {
let maxDay = 28;
if (['01', '03', '05', '07', '08', '10', '12'].includes(month)) {
maxDay = 31;
} else if (['04', '06', '09', '11'].includes(month)) {
maxDay = 30;
}
return getRandomInt(1, maxDay);
};
const month = String(getRandomMonth()).padStart(2, '0');
const day = String(getRandomDay(month)).padStart(2, '0');
const year = new Date().getFullYear() + getRandomInt(1, 10);
return `${day}/${month}/${year}`;
},
titularName(fullTitularName) {
const name = fullTitularName || nome.nome.aleatorioCompleto();
const names = name.split(' ');
const nameTitular = `${names[0]} ${names[1].charAt(0)} ${names.slice(-1)[0]}`;
return nameTitular.toUpperCase();
},
};
/**
* Gera Cartão de Crédito aleatório.
* Fornece métodos para gerar número de Cartão de Crédito, Bandeira, CVV, Data De Expiração e Nome do Titular.
* @param {boolean} [mask=false] - Se `true`, o número do cartão será retornado com a máscara de formatação (xxxx xxxx xxxx xxxx).
* Se `false`, o número do cartão será retornado apenas com os dígitos.
* @param {string} - Nome completo do titular
* @returns {object} Um objeto contendo número do cartão, bandeira, CVV, data de expiração e nome do titular
*
* @example
* // Gera objeto cartaoCredito com as propriedades:
* // numero (sem máscara), bandeira, cvv, dataExpiracao e nomeTitular aleatório (abreviado)
* console.log(cartaoCredito());
* // =>
* {
* numero: '6547178146357745',
* bandeira: 'mastercard',
* cvv: '532',
* dataExpiracao: '12/07/2028',
* nomeTitular: 'BRENDA B LIMA'
* }
*
* // Opcionalmente, atribua o objeto a uma variável e utilize as propriedades
* const cc = cartaoCredito();
* console.log(cc.numero);
* console.log(cc.bandeira);
* console.log(cc.cvv);
* console.log(cc.dataExpiracao);
* console.log(cc.nomeTitular);
*
* // Gera objeto cartaoCredito com as propriedades:
* // numero (com máscara), bandeira, cvv, dataExpiracao e nomeTitular informado (abreviado)
* console.log(cartaoCredito(true, "João Santos da Silva"));
* // =>
* {
* numero: '5534 5523 6833 6867',
* bandeira: 'visa',
* cvv: '866',
* dataExpiracao: '25/07/2033',
* nomeTitular: 'JOÃO S SILVA'
* }
*
* // Gera objeto cartaoCredito com as propriedades:
* // numero (sem máscara), bandeira, cvv, dataExpiracao e nomeTitular informado (abreviado)
* console.log(cartaoCredito(false, "Maria Aparecida Reis"));
* // =>
* {
* numero: '5534552368336867',
* bandeira: 'visa',
* cvv: '866',
* dataExpiracao: '25/07/2033',
* nomeTitular: 'MARIA A REIS'
* }
*
*/
const cartaoCredito = function cc(mask, fullTitularName) {
return creditCard.generate(mask, fullTitularName);
};
exports.cartaoCredito = cartaoCredito;