gerador-br
Version:
Gerador de Dados Fictícios - Brasil
82 lines (72 loc) • 2.51 kB
JavaScript
;
/**
* Calcula o dígito verificador do CNS.
* @param {string} cnsBase - A base do CNS (sem o dígito verificador).
* @returns {string} O dígito verificador do CNS.
*/
function cnsDV(cnsBase) {
let sum = 0;
for (let i = 0; i < cnsBase.length; i++) {
sum += Number(cnsBase.charAt(i)) * (15 - i);
}
let mod = sum % 11;
let dv = 11 - mod;
if (dv === 10) {
sum = 2;
for (let i = 0; i < cnsBase.length; i++) {
sum += Number(cnsBase.charAt(i)) * (15 - i);
}
mod = sum % 11;
dv = 11 - mod;
return '001' + dv; // Adiciona "001" se dv = 10
} else if (dv === 11) {
return '0000';
} else {
return '000' + dv; // Adiciona dv normal
}
}
/**
* Gera um número de Cartão Nacional de Saúde (CNS) aleatório.
* @param {boolean} mask - Se true, retorna o CNS com máscara (XXX XXXX XXXX XXXX).
* @param {string} type - O tipo de CNS a ser gerado ('beneficiario' para beneficiários do SUS, 'profissional' para profissionais de saúde).
* @returns {string} O número de CNS gerado.
* @example
* // CNS sem máscara e tipo aleatório
* console.log(cns());
*
* // CNS sem máscara e do tipo informado
* console.log(cns(false, 'beneficiario'));
* console.log(cns(false, 'profissional'));
*
* // CNS com máscara e tipo aleatório
* console.log(cns(true));
*
* // CNS com máscara e do tipo informado
* console.log(cns(true, 'beneficiario'));
* console.log(cns(true, 'profissional'));
*/
function cns(mask, type) {
let firstDigit;
// Define o primeiro dígito com base no tipo
if (type === 'beneficiario') {
firstDigit = Math.floor(Math.random() * 2) + 1; // 1 ou 2
} else if (type === 'profissional') {
firstDigit = Math.floor(Math.random() * 3) + 7; // 7, 8 ou 9
} else {
const availableDigits = [1, 2, 7, 8, 9];
firstDigit = availableDigits[Math.floor(Math.random() * availableDigits.length)];
}
// Gera os próximos 11 dígitos
const n2 = String(Math.floor(Math.random() * 100000)).padStart(5, '0'); // 5 dígitos
const n3 = String(Math.floor(Math.random() * 100000)).padStart(5, '0'); // 5 dígitos
// Constrói a base do CNS
let cnsGen = `${firstDigit}${n2}${n3}`; // Base: 1 dígito inicial + 10 dígitos
// Cálculo do dígito verificador
cnsGen += cnsDV(cnsGen);
if (mask) {
return `${cnsGen.substr(0, 3)} ${cnsGen.substr(3, 4)} ${cnsGen.substr(7, 4)} ${cnsGen.substr(11, 4)}`;
}
return cnsGen; // Retorna CNS sem máscara
}
exports.cns = cns;
exports.cnsDV = cnsDV;