# Guias para desenvolvedores

> Explicações diretas, com o cálculo passo a passo e código testado em JavaScript, Python e PHP.

- Endereço oficial: https://pradev.com.br/guias

- [Contraste de cores e acessibilidade: o que a WCAG exige](https://pradev.com.br/guias/contraste-de-cores-wcag-acessibilidade): O que a WCAG exige de contraste entre texto e fundo (4,5:1 no AA), como a razão é calculada e como corrigir cores que não passam, com código.
- [OKLCH no CSS: cores e paletas que fazem sentido](https://pradev.com.br/guias/oklch-no-css-cores-e-paletas): O que é OKLCH, por que ele gera paletas mais equilibradas que HSL e como usar oklch() no CSS, com a conversão de HEX em JavaScript e Python.
- [Somar meses e calcular idade sem erro: o problema do dia 31](https://pradev.com.br/guias/somar-meses-e-calcular-idade-sem-erro): Por que 31 de janeiro mais 1 mês dá resultados diferentes em cada linguagem, como somar meses do jeito certo e como calcular a idade sem dividir por 365.
- [Caracteres invisíveis: por que o texto colado quebra o código](https://pradev.com.br/guias/caracteres-invisiveis-no-texto-colado): Espaço de largura zero, BOM e espaço não separável fazem textos iguais serem diferentes. Veja como encontrar e remover esses caracteres, com código.
- [Como calcular dias úteis com os feriados nacionais](https://pradev.com.br/guias/como-calcular-dias-uteis-com-feriados): Como calcular dias úteis e prazos com os feriados nacionais do Brasil, incluindo Sexta-feira Santa pela Páscoa e Consciência Negra, em JavaScript, Python e PHP.
- [Paginação com offset ou cursor: qual usar e como fazer](https://pradev.com.br/guias/paginacao-offset-ou-cursor): Por que a paginação com OFFSET fica lenta e repete itens, como fazer paginação por cursor (keyset) em SQL e exemplos em JavaScript, Python e PHP com SQLite.
- [Como fazer o token de "esqueci minha senha" com segurança](https://pradev.com.br/guias/token-de-redefinicao-de-senha): Como gerar, guardar e conferir o token de redefinição de senha: aleatório, só o hash no banco, com validade curta e uso único, em JavaScript, Python e PHP.
- [Como gerar PIX copia e cola (BR Code) em código](https://pradev.com.br/guias/como-gerar-pix-copia-e-cola): Como montar o código PIX copia e cola (BR Code estático) em JavaScript, Python e PHP: os campos, o CRC16 e os erros que fazem o banco recusar o código.
- [Como validar número de cartão de crédito (algoritmo de Luhn)](https://pradev.com.br/guias/como-validar-cartao-de-credito-luhn): Como funciona o algoritmo de Luhn, o dígito verificador dos cartões, e como validar número de cartão em JavaScript, Python e PHP sem guardar dados sensíveis.
- [Como repetir requisições com backoff exponencial (retry)](https://pradev.com.br/guias/como-repetir-requisicoes-com-backoff): Como repetir chamadas de API que falham com backoff exponencial e jitter, quais erros vale repetir e como não cobrar duas vezes, em JavaScript, Python e PHP.
- [Como buscar o endereço pelo CEP com o ViaCEP](https://pradev.com.br/guias/como-buscar-endereco-pelo-cep-viacep): Como consultar o endereço de um CEP no ViaCEP em JavaScript, Python e PHP, tratar CEP inexistente e erros de rede e preencher o formulário sozinho.
- [Variáveis de ambiente e segredos: como usar o .env sem vazar senhas](https://pradev.com.br/guias/variaveis-de-ambiente-e-segredos-env): Como usar variáveis de ambiente e o arquivo .env em Node.js, Python e PHP, por que prefixos como VITE_ e NEXT_PUBLIC_ expõem segredos e o que fazer se um vazar.
- [Como gerar slug de URL a partir de texto com acentos](https://pradev.com.br/guias/como-gerar-slug-de-url-com-acentos): Como transformar um título com acentos em slug de URL (Ação e Reação vira acao-e-reacao) em JavaScript, Python e PHP, e os cuidados com slugs repetidos.
- [Datas e fuso horário em JavaScript: por que sua data muda de dia](https://pradev.com.br/guias/datas-e-fuso-horario-em-javascript): Por que new Date("2026-01-15") vira dia 14 no Brasil, como mostrar datas no horário de Brasília e como evitar erros de fuso em JavaScript, Python e PHP.
- [Dinheiro em código: formatar em reais (R$) sem erro de centavos](https://pradev.com.br/guias/como-formatar-dinheiro-em-reais): Como formatar valores em reais em JavaScript, Python e PHP, por que 0,1 + 0,2 não dá 0,3 e como dividir em parcelas sem perder centavos, com código testado.
- [Máscara de CPF, CNPJ, CEP e telefone em JavaScript](https://pradev.com.br/guias/mascara-cpf-cnpj-cep-telefone-javascript): Máscaras de CPF, CNPJ (inclusive alfanumérico), CEP e telefone em JavaScript puro, aplicadas enquanto a pessoa digita, e a formatação em Python e PHP.
- [Como comparar dois JSON ignorando a ordem das chaves](https://pradev.com.br/guias/como-comparar-dois-json): Por que comparar JSON como texto dá errado e como listar as diferenças entre dois JSON em JavaScript, Python e PHP, com as pegadinhas de tipo de cada uma.
- [Como comparar dois textos (diff) no terminal e em código](https://pradev.com.br/guias/como-comparar-textos-diff): Como comparar textos e arquivos com diff e git diff, ler o formato unificado e gerar diferenças em JavaScript e Python, com os erros de quebra de linha.
- [Expressão cron: como ler, escrever e acertar o fuso horário](https://pradev.com.br/guias/expressao-cron-como-ler-e-escrever): Os cinco campos do cron, exemplos prontos, a regra do dia do mês com dia da semana e como converter o horário de Brasília para UTC, com código testado.
- [YAML: as armadilhas que trocam seus dados e como converter para JSON](https://pradev.com.br/guias/yaml-armadilhas-e-conversao-para-json): Por que no vira false e 12:30 vira 750 em alguns leitores de YAML, como evitar isso e como converter YAML e JSON em JavaScript e Python, com código testado.
- [Como gerar CPF e CNPJ válidos para testes em código](https://pradev.com.br/guias/como-gerar-cpf-e-cnpj-para-testes): Como gerar CPF e CNPJ matematicamente válidos para testes em JavaScript, Python e PHP, o cálculo dos dígitos e os cuidados para não usar dados de pessoas reais.
- [Como guardar senhas: por que não usar SHA-256 e o que usar](https://pradev.com.br/guias/como-guardar-senhas-com-hash): Por que MD5 e SHA-256 não servem para senhas e como guardar senhas com scrypt, bcrypt ou Argon2 em Node.js, Python e PHP, com sal e código testado.
- [Como gerar senha segura em código (sem Math.random)](https://pradev.com.br/guias/como-gerar-senha-segura-em-codigo): Por que Math.random não serve para senhas, como evitar o viés do módulo e como gerar senhas seguras em JavaScript, Python e PHP, com código testado.
- [CSV no Excel em português: ponto e vírgula, acentos e zeros à esquerda](https://pradev.com.br/guias/csv-excel-ponto-e-virgula-acentos): Por que o CSV abre numa coluna só ou com acentos quebrados no Excel em português e como gerar e ler CSV certo em JavaScript, Python e PHP, com código testado.
- [Como formatar e validar JSON em JavaScript, Python e PHP](https://pradev.com.br/guias/como-formatar-e-validar-json): Como deixar JSON legível e descobrir o erro de um JSON inválido em JavaScript, Python e PHP, com os erros mais comuns e as diferenças entre as linguagens.
- [Regex para CEP, telefone e e-mail no Brasil](https://pradev.com.br/guias/regex-cep-telefone-email): Expressões regulares para validar CEP, telefone com DDD e e-mail, com os erros que deixam passar valores inválidos em JavaScript, Python e PHP.
- [URL encode: como codificar parâmetros de URL sem quebrar nada](https://pradev.com.br/guias/url-encode-como-codificar-parametros): Quando usar encodeURIComponent ou encodeURI, por que o espaço vira + ou %20 e como codificar URL em JavaScript, Python e PHP, com código testado.
- [Timestamp Unix: como converter data e hora em código](https://pradev.com.br/guias/timestamp-unix-como-converter): Entenda o timestamp Unix, a diferença entre segundos e milissegundos e como converter de e para data em JavaScript, Python e PHP, com código testado.
- [Base64 com acentos: como codificar e decodificar sem erro](https://pradev.com.br/guias/base64-com-acentos-utf8): Por que o btoa erra com acentos e emojis e como codificar e decodificar Base64 em UTF-8 e Base64URL em JavaScript, Python e PHP, com código testado.
- [SHA-256 de arquivo: como gerar e conferir sem estourar a memória](https://pradev.com.br/guias/sha256-de-arquivo-em-codigo): Como gerar e conferir o SHA-256 de um arquivo pelo terminal e em Node.js, Python e PHP, lendo em pedaços, com código testado e os cuidados na conferência.
- [CNPJ alfanumérico: o que muda e como validar em código](https://pradev.com.br/guias/cnpj-alfanumerico-como-validar): Entenda o CNPJ alfanumérico (letras e números), o que muda para quem desenvolve e veja funções testadas para validar em JavaScript, Python e PHP.
- [Como validar CPF em JavaScript, Python e PHP](https://pradev.com.br/guias/como-validar-cpf-em-javascript): Aprenda a calcular os dígitos verificadores do CPF e veja funções prontas e testadas para validar CPF em JavaScript, Python e PHP.
- [Como decodificar e verificar um JWT em JavaScript e Python](https://pradev.com.br/guias/como-decodificar-e-verificar-jwt): Entenda a diferença entre decodificar e verificar um JWT e veja código testado em JavaScript e Python para ler o token e checar a assinatura HS256.
- [Como validar a assinatura de um webhook com HMAC](https://pradev.com.br/guias/como-validar-assinatura-de-webhook-hmac): Aprenda a conferir a assinatura HMAC-SHA256 de webhooks em Node.js, Python e PHP, com código testado e os erros que fazem a validação falhar.
- [UUID v4 ou v7: qual usar e como gerar em código](https://pradev.com.br/guias/uuid-v4-ou-v7): Veja a diferença entre UUID v4 e v7, quando cada um vale a pena e como gerar os dois em JavaScript e Python, com código testado.
