Meu relato, sobre programação e Sindrome do Impostor
Hoje eu pensei em criar algo em BackEnd com NodeJS, então pensei, pq não uma API já que hoje em dia e tão requisitada.
criei uma api simples, com as rotas e o servidor tudo no mesmo arquivo.
Criei minha logica conforme eu estudei e aprendi:
const cpf = '09584479938'
function LimparCPF(cpf){
return cpf.split('').slice(0,9)
}
function etapaUm(){
let n_acumulador = 10
let soma = []
let cpf_limpo = LimparCPF(cpf)
for(let i = 0; i < 9;i++){
let calc = cpf_limpo[i] * n_acumulador
soma.push(calc)
n_acumulador -= 1
}
let resultado = soma.reduce((ac,numero)=> ac + numero)
let J = resultado % 11
if(J < 2){
return 0
}else{
return 11 - J
}
}
function etapaDois(){
let n_acumulador = 11
let soma = []
let cpf_limpo = LimparCPF(cpf).concat(etapaUm())
for(let i = 0; i < 10;i++){
let calc = cpf_limpo[i] * n_acumulador
soma.push(calc)
n_acumulador -= 1
}
let resultado = soma.reduce((ac,numero)=> ac + numero)
let K = resultado % 11
if(K < 2){
return 0
}else{
return 11 - K
}
}
function Final(){
let Cpf_verificador = LimparCPF(cpf).concat(String(etapaUm())).concat(String(etapaDois()))
let data = Cpf_verificador.join('')
if(cpf === data){
console.log('cpf valido')
}else{
console.log('Cpf invalido')
}
}
Final()
Ai como uma pessoa curiosa e quer sempre melhorar, eu fui e pedi ajuda ao chat gpt, a me indicar melhorias, e fui melhorando o codigo, sem delegar nada a ele, somente alterando conforme as ideias que ela me passava. Até ai tudo bem criei o codigo comentando a cada linha oque tava fazendo, para quando eu rever esse codigo etender :
const express = require('express');
const app = express();
app.use(express.json());
function obterNumerosCPF(cpf) { // Função onde eu Pego o cpf e tiro os 9 primeiros digitos
return cpf.replace(/\D/g, '').split('').slice(0, 9).map(Number); // faz a limpeza de letras e caracteres e deixa somente os numeros, no .split, faz a separação de numero por array, e slice seleciona os 9 primeiros numeros
}
function calcularDigito(cpfArray, multiplicadorInicial) { // Aqui os indices são o cpf da função acima, e o multiplicador conforme a etapa do calculo
let resultado = cpfArray.reduce((acumulador, numero, index) => {
return acumulador + numero * (multiplicadorInicial - index);
}, 0);
return resultado % 11 < 2 ? 0 : 11 - (resultado % 11); // if ternarion onde se o resultado for menor que < 2 (0 ou 1) ele retorna 0, : se não pega o Resultado do resto da divisão e diminui por 11
}
function validarCPF(cpf) { // função que roda todo o calculo
let cpfNumeros = obterNumerosCPF(cpf); // aqui ele pega o cpf da função obterNumerosCPF() e torna uma variavel
let primeiroDigito = calcularDigito(cpfNumeros, 10); // aqui executa a primeira ação do calculo que seria 9 digitos, Multiplicando cada numero do cpf da esqueda para direitoa por 10,9,8,7,6,5,4,3,2
let segundoDigito = calcularDigito([...cpfNumeros, primeiroDigito], 11);// aqui e a segunda etapa, onde adiciona o numero verificador do calculo anterior
let cpfCompleto = [...cpfNumeros, primeiroDigito, segundoDigito].join(''); // aqui Junta todo o cpf com os verificadores do primeiroDigito e do segundoDigito
return cpf.replace(/\D/g, '') === cpfCompleto; // e retorna o cpf completo comparando com o cpf inicial.
}
app.get('/validar/:cpf', (req, res) => {
const { cpf } = req.params;
const valido = validarCPF(cpf);
res.json({ cpf, valido });
});
app.post('/validar', (req, res) => {
const { cpf } = req.body;
if (!cpf) return res.status(400).json({ erro: 'CPF não informado' });
const valido = validarCPF(cpf);
res.json({ cpf, valido });
});
// Inicia o servidor
const PORT = 3000;
app.listen(PORT, () => console.log(`API rodando em http://localhost:${PORT}`));
e Agora vem a Sindrome, como eu fui pedindo ajuda, sinto que não fui eu quem fiz... como se eu pedisse para ela,Prompt: Crie para mim uma api para validar o cpf e blabla
OBS: eu etendi melhor alguns conceitos, como o .reduce((acumulador,numero,index)) por exemplo eu não sabia que o reduce podia se por um index...
Repositorio
Api Hospedado no Render
voces tambem se sentem assim quando utilizam a IA para te ajudar?