Verificação CPR Dinamarca
Digite 0707610018 e veja que é um CPR dinamarquês válido de uma mulher nascida em 7 de julho de 1961, com o controle módulo 11 correto. A forma com hífen, como 070761-0018, também funciona. Útil em abertura de contas e RH. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Número
- 0707610018
- Entrada
- 0707610018
- Data de nascimento
- 1961-07-07
- Dia
- 7
- Mês
- 7
O número CPR dinamarquês (personnummer do Det Centrale Personregister) é o identificador civil nacional usado em fiscalidade, saúde, banca, emprego e na maioria dos formulários públicos da Dinamarca. Na forma habitual tem dez dígitos: seis para a data de nascimento como dia-mês-ano (DDMMYY) e quatro de série que codificam pistas de século, uma sequência e um dígito de controle final. Os números clássicos aplicam uma soma ponderada de módulo onze sobre os dez dígitos, de modo que um único erro de digitação costuma ser rejeitado antes de armazenar ou emparelhar o identificador. Esta capacidade valida apenas essa estrutura. Verifica se a data embutida é um dia de calendário real segundo as regras oficiais de século do sétimo dígito, indica se a soma clássica de módulo onze divide de forma exata e devolve a data de nascimento em ISO mais o gênero inferido do último dígito (ímpar masculino, par feminino). Formas com hífen como DDMMYY-XXXX são aceitos após normalização.
Como um número CPR dinamarquês é estruturado e verificado
Segundo a prática dinamarquesa de registro civil, um personnummer CPR tem dez dígitos escritos de forma compacta como DDMMYYXXXX ou com um hífen após a data como DDMMYY-XXXX. As posições um e dois são o dia de nascimento, três e quatro o mês, e cinco e seis o ano de dois dígitos.
O sétimo dígito participa na resolução do século para reconstruir o ano de nascimento de quatro algarismos sem um campo de século separado: os dígitos de zero a três mapeiam para mil e novecentos mais o ano de dois dígitos; os dígitos quatro e nove mapeiam para dois mil quando o ano é trinta e seis ou menos e, caso contrário, permanecem em mil e novecentos; os dígitos de cinco a oito mapeiam para dois mil quando o ano é cinquenta e sete ou menos e, caso contrário, para mil e oitocentos nas coortes mais antigas.
Assim que o ano completo é conhecido, a capacidade verifica se o dia existe nesse mês, incluindo vinte e nove de fevereiro apenas em anos bissextos gregorianos, com aritmética pura e sem o relógio do host. A regra clássica de controle multiplica os dez dígitos pelos pesos fixos quatro, três, dois, sete, seis, cinco, quatro, três, dois e um, e exige que a soma ponderada seja divisível por onze. O último dígito também indica o gênero: ímpar para masculino e par para feminino.
Um exemplo conhecido é zero sete zero sete seis um zero zero um oito, nascido a sete de julho de mil novecentos e sessenta e um, feminino, com soma clássica correta.
Onde as verificações CPR dinamarquesas se encaixam em fluxos reais
Bancos e fintechs validam valores CPR de dez dígitos na abertura de conta para que uma única transposição não crie um cliente fantasma nem um registro KYC rejeitado. Trabalhos ETL que carregam arquivos mestres de clientes ou empregados dinamarqueses percorrem cada coluna CPR num feed CSV ou XML, chamam esta capacidade e colocam em quarentena as linhas onde valid é false, capturando tanto edições humanas como erros de um em geradores.
Sistemas municipais e escolares costumam aceitar formas com hífen e compactas; remover espaços e hífens antes da verificação de dígitos mantém o contrato simples sem inventar um segundo algoritmo.
Não trate um CPR com controle correto como prova de que o titular vive no registro populacional, tem cartão de saúde dinamarquês ou está autorizado para um serviço; só demonstra que a data é válida no calendário segundo as regras de século e que o dígito clássico de módulo onze é coerente com os pesos oficiais quando essa regra ainda se aplica.
Casos de uso
Validar um CPR dinamarquês digitado em formulários de admissão
Quando um cadastro, um KYC bancário ou um formulário de RH recolhe um personnummer, chame a verificação e bloqueie o envio se valid for false, mostrando ainda a data de nascimento ISO extraída para correção.
Auditar colunas CPR em dados mestres dinamarqueses
Valide em lote cada CPR de um CSV de CRM, EHR ou folha de pagamento e coloque em quarentena as linhas cuja data seja impossível ou cujo controle clássico de módulo onze já não coincida.
Perguntas frequentes
O que a verificação de CPR da Dinamarca valida?
Verifica se um personnummer dinamarquês de dez dígitos embute uma data de nascimento de calendário real (com século a partir do sétimo dígito) e se o controle ponderado clássico mod-11 sobre os dez dígitos está correto.
Que formato deve ser enviado?
Envie dez dígitos DDMMYYXXXX, opcionalmente com hífen ou espaços (por exemplo 070761-0018). Após remover espaços e hífens o corpo deve ter exatamente dez dígitos 0–9.
Quanto custa a verificação de CPR da Dinamarca?
A ferramenta do navegador é gratuita e corre localmente.
Um CPR verdadeiro pode falhar no controle módulo 11?
Pode. Números emitidos depois da flexibilização da regra em outubro de 2007 podem ser reais mesmo quando a soma módulo 11 falha. A ferramenta informa esse controle à parte, para você aplicar uma política rígida ou aceitar só a data.
Como se descobre o ano completo de nascimento?
Pelo sétimo dígito e pelo ano de dois dígitos. De 0 a 3 indicam os anos 1900; 4 e 9 indicam os anos 2000 até o ano 36 e, acima disso, os 1900; de 5 a 8 indicam os 2000 até o 57 e, acima disso, os 1800.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/enc/cpr-denmark \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"0707610018"}'const res = await fetch("https://api.kit.forhosting.com/enc/cpr-denmark", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "0707610018"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/cpr-denmark",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "0707610018"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/cpr-denmark", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"0707610018"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"0707610018"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/cpr-denmark", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"number": "0707610018"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.cpr_denmark",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Comprimento incorreto, corpos não numéricos e datas impossíveis falham com invalid_input em vez de um recorte silencioso. A mesma aritmética pura corre grátis no navegador e ao preço publicado da API, sem consulta ao registro populacional e sem afirmar que um controle correto implique que a pessoa viva, esteja registada ou tenha direito a um serviço.
Como um número CPR dinamarquês é estruturado e verificado
Números emitidos após a relaxação de outubro de dois mil e sete podem ser oficiais mesmo quando a soma de módulo onze falha; esta ferramenta continua a reportar mod11_valid para que quem chama aplique uma política estrita ou apenas de data.
Contrato de entrada, forma da resposta e erros
Após a normalização o motor exige exatamente dez dígitos. Analisa dia, mês e ano de dois dígitos, resolve o ano completo a partir do sétimo dígito e rejeita datas de calendário impossíveis com uma mensagem clara que nomeia o dia ou o mês incorreto. Comprimento incorreto após o strip, cadeias vazias, number ausente e corpos sem dígitos falham antes de qualquer soma de controle e não são faturados. Envie um corpo JSON com um campo number obrigatório contendo o corpo do CPR. Espaços e hífens são removidos para que as formas dinamarquesas habituais como zero sete zero sete seis um hífen zero zero um oito sejam aceitos após normalização; outra pontuação e letras são rejeitadas como entrada não numérica com invalid_input, de modo que um valor limpo em silêncio nunca chegue ao armazenamento. Com uma data real a resposta inclui sempre input como a cadeia normalizada de dez dígitos, valid true apenas quando o controle clássico de módulo onze também passa, birth_date como cadeia ISO ano-mês-dia, day, month e year como inteiros, date como o fragmento de seis dígitos DDMMYY, serial como a cauda de quatro dígitos, gender como male ou female, mod11_valid como espelho booleano da soma de controle, check_digit como o último carácter, length dez e algorithm denmark-cpr-mod11. Uma cadeia bem formada com data real mas dígito de controle incorreto devolve valid false e mod11_valid false sem lançar erro, para que os formulários mostrem a data extraída e mesmo assim bloqueiem o registro. Aceitam-se aliases como cpr, digits, text, value, code e id para o mesmo campo de payload, de modo que integrações que já usam nomes dinamarqueses não precisem de renomear. Como o caminho é parse puro sem relógio, fonte aleatória nem rede, o mesmo corpo JSON produz sempre o mesmo resultado JSON na ferramenta gratuita do navegador e na API a US$ 0,002 por pedido bem-sucedido. Prefira este endpoint quando condicionar um formulário, um arquivo KYC, uma importação de RH ou um ingresso de saúde a um CPR digitado por um usuário ou feed de parceiro e precisar, numa só chamada, da verificação de data e do controle clássico.
Onde as verificações CPR dinamarquesas se encaixam em fluxos reais
Portais de saúde e sistemas de farmácia recalculam birth_date e mod11_valid quando uma clínica lê um número ao telefone ou o cola a partir de um cartão digitalizado, capturando erros de digitação antes de arquivar uma entrada de prontuário ou uma receita. Testes de integração afirmam birth_date e gender em amostras fixas para que bibliotecas de formulários, impressoras de etiquetas e esta API não divirjam. Em todo o fluxo a promessa é a mesma: apenas dígitos após o strip opcional de separadores, comprimento fixo dez, JSON estruturado que pode ser testado com goldens, comportamento idêntico no navegador gratuito e na API pré-paga, e invalid_input honesto quando a cadeia não é uma sequência pura de dez dígitos com uma data de calendário real.
Casos de integração
Fixar fixtures para testes de saúde e folha de pagamento
Use amostras válidas conhecidas como 0707610018 em pacientes e colaboradores de sandbox, afirmando birth_date, gender e mod11_valid para que os dados de teste se mantenham estáveis entre versões.
Perguntas técnicas
O que acontece se o controle mod-11 falhar mas a data for real?
A tarefa termina com sucesso com valid false e mod11_valid false, e continua a devolver birth_date e gender. CPR posteriores a 2007 podem ser oficiais sem soma clássica correta; use mod11_valid se precisar de uma política mais flexível.
Quando se obtém invalid_input?
Number ausente, cadeia vazia, caracteres não numéricos após o strip, comprimento diferente de dez ou uma data de calendário impossível (mês ou dia incorretos) falham com invalid_input e não são faturados.