<!DOCTYPE html> <html> <head> <title>CPR-nummer</title> <style> body { text-align: center; font-family: sans-serif; } label { font-size: 1.4em; font-weight: bold; } #input { font-family: monospace; width: 11ch; font-size: 1.4em; padding: 4px 6px; margin-top: 4px; } #result { font-size: 1.2em; } #result.valid { color: green; } #result.invalid { color: red; } </style> <script> window.onload = function() { var input = document.getElementById("input"); var result = document.getElementById("result"); var description = document.getElementById("description"); input.onkeyup = function() { // Reset result.className = ""; result.innerText = ""; description.innerText = ""; // Validate if (input.value.length != 11 || !input.reportValidity()) return; // Calculate date var day = parseInt(input.value.slice(0, 2)); var month = parseInt(input.value.slice(2, 4)); var year = parseInt(input.value.slice(4, 6)); // Calculate full year var seventhDigit = parseInt(input.value.charAt(7)); if (seventhDigit < 4) year += 1900; else if (seventhDigit === 4 || seventhDigit === 9) year += (year > 36 ? 1900 : 2000); else if (seventhDigit < 8) year += (year > 57 ? 1900 : 2000); // Get strings for result var date = new Date(year, month - 1, day); var dateString = date.toLocaleDateString("da-DK", { year: "numeric", month: "long", day: "numeric", }); var gender = parseInt(input.value.charAt(10)) % 2 === 0 ? "Kvinde" : "Mand"; // Calculate checksum var factors = [4, 3, 2, 7, 6, 5, 4, 3, 2, 1]; var sum = input.value .replace("-", "") .split("") .map(function(digit, index) { return parseInt(digit) * factors[index]; }) .reduce(function(acc, val) { return acc + val; }, 0); if (sum % 11 === 0) { result.className = "valid"; result.innerText = "Gyldigt CPR-nummer"; description.innerHTML = "<b>Fødselsdato:</b> " + dateString + "<br><b>Køn:</b> " + gender; } else { result.className = "invalid"; result.innerText = "Ugyldigt CPR-nummer"; } } } </script> </head> <body> <label for="input">Indtast CPR-nummer:</label> <br> <input id="input" type="text" placeholder="XXXXXX-XXXX" maxlength="11" pattern="\d{6}-\d{4}" autofocus> <p id="result"></p> <p id="description"></p> </body> </html>