IT-branchen står for 4% af CO2-udledningen, men vi udskifter vores udstyr langt oftere, end behovet retfærdiggør.
Slettet bruger
02. januar 2007 - 13:35#1
Fremgangs måden er: Alle tallene i dit CPR nummer skal ganges med et andet. 110982 4886 (Har bare skrevet nogen tal) 1. tal => (1) * 4 2. tal => (1) * 3 3. tal => (0) * 2 4. tal => (9) * 7 5. tal => (8) * 6 6. tal => (2) * 5
7. tal => (4) * 4 8. tal => (8) * 3 9. tal => (8) * 2 10. tal => (6) * 1
Disse tal skal plusses med hinanden, og derefter skal det divideres med 11. er tallet divideret med 11 et helt tal (og ikke 0) så er det gyldigt.
Synes godt om
Slettet bruger
02. januar 2007 - 13:36#2
(Har lavet det i PHP derfor jeg bare nævner fremgangs måden, så kan du måske selv lave det)
/** * Validates a Social Security Number based on the Modulo-11 algorithm (http://www.opfinderen.dk/sites/74/). * * @param socSecNum The Social Secure Number to validate. * @return Returns true if the SSN is valid. */ public static boolean isValidSocSecNum(String socSecNum) { boolean valid = socSecNum.matches("^(3[01]|[12]\\d|0[1-9])(1[0-2]|0[1-9])\\d{6}$");
if (valid) { int[] weight = {4, 3, 2, 7, 6, 5, 4, 3, 2, 1}; int controlSum = 0;
for (int i = 0; i < 10; i++) { int digitSsn = Integer.parseInt(socSecNum.substring(i, i + 1));
controlSum += digitSsn * weight[i]; // SSN-digit multiplied with its corresponding weight. }
valid = (controlSum % 11 == 0); }
return valid; }
int[] weight : Kan opfattes som et array med 10 elementer. De enkelte tal i CPR-nummeret ganges med den tilsvarende vægtning. Summen af disse produkter (tal * vægtning) skal give 0 i rest ved heltalsdivision med 11.
Hallo! Fulgte lige mit eget link (fra kommentaren):
<% Function CPROK(Streng) Dim Nummer, Sum Nummer = Trim(Replace(Streng, "-", "")) If Len(Nummer) <> 10 Or Not IsNumeric(CStr(Nummer)) Then Exit Function Check = Array(4, 3, 2, 7, 6, 5, 4, 3, 2, 1) Sum = 0 For i = 0 To 9 Sum = Sum + CInt(Mid(Nummer, i, 1)) * Check(i) Next If Sum Mod 11 = 0 Then CPROK = True End Function
If CPROK("250342-1247") Then ' Gyldigt Else ' Ugyldigt End If %>
<% Function CPROK(Streng) Dim Nummer, Sum Nummer = Trim(Replace(Streng, "-", "")) If Len(Nummer) <> 10 Or Not IsNumeric(CStr(Nummer)) Then Exit Function Check = Array(4, 3, 2, 7, 6, 5, 4, 3, 2, 1) Sum = 0 For i = 0 To 9 Sum = Sum + CInt(Mid(Nummer, i, 1)) * Check(i) Next If Sum Mod 11 = 0 Then CPROK = True End Function
If CPROK("250342-1247") Then ' Gyldigt
CInt(Mid(Nummer, 9, 1)) Mod 2 = 0 Then ' Du er en kvinde Else ' Du er en mand End If
Der er bare lige det problem at vi er ved at løbe tør for CPR numre, - så CPR registeret har påberåbt sig retten til at droppe CPR numeret checksum der hvor det er nødvendigt (de første ca. 270 personer af hvert køn vil altid få et CPR nummer med korrekt checksum).
Så der kan forekomme personer med et CPR nummer som du jfr. ovenstående algoritmer vil kalde illegalt!
De principper, der ligger bag den valgte løsning, kan ultrakort beskrives således: På hver fødselsdag tildeles først som hidtil personnumre med kontrolciffer (personnummerets 10. ciffer). Når (hvis) de ca. 540 personnumre med kontrolciffer, der er til rådighed på en bestemt fødselsdato, er brugt (ca. 270 til kvinder og ca. 270 til mænd), tildeles personnummer, hvortil der ikke er tilknyttet kontrolciffer.
Med løsningen vil kapaciteten i personnummersystemet mod nu 540 personnumre pr. fødselsdato i stedet blive forøget til 1) 4.000 personnumre pr. fødselsdato i årene 1858 - 1936, 2) 6.000 personnumre pr. fødselsdato i årene 1937 – 2036 og 3) 4.000 personnumre pr. fødselsdato i årene 2037 – 2057."
<% Function CPROK(Streng) Dim Nummer, Sum Nummer = Trim(Replace(Streng, "-", "")) If Len(Nummer) <> 10 Or Not IsNumeric(CStr(Nummer)) Then Exit Function Check = Array(4, 3, 2, 7, 6, 5, 4, 3, 2, 1) Sum = 0 For i = 0 To 9 Sum = Sum + CInt(Mid(Nummer, i, 1)) * Check(i) Next If Sum Mod 11 = 0 Then CPROK = True End Function
If CPROK("250342-1247") Then Response.Write "Gyldigt CPR"
If CInt(Mid(Nummer, 9, 1)) Mod 2 = 0 Then Response.Write "... og du er en <span style=\"color: red\">kvinde</span>" Else Response.Write "... og du er en <span style=\"color: blue\">mand</span>" End If
Det må næsten være rigtigt, bort set fra at \ ikke er escape i VB (ASP). Brug i stedet "" eller ' i din span ;)
If CInt(Mid(Nummer, 9, 1)) Mod 2 = 0 Then Response.Write "... og du er en <span style=""color: red"">kvinde</span>" Else Response.Write "... og du er en <span style=""color: blue"">mand</span>" End If
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.