nemrod.se Various guides and experiments

Validera Personnummer (Swedish SSN Validator)


This post will be in Swedish since it will mainly be interesting to a Swedish audience. The code will work just the same and shouldn’t be too hard to figure out.

På ett uppdrag jag slutförde för ett tag sedan uppstod problemet att bekräfta att en person inte redan fanns registrerad i databasen. Det är givetvis rätt lätt att kolla om personnumret redan finns registrerat, men vad är det som säger att personen inte helt enkelt bestämde sig för att skriva in några slumpmässiga siffror i fältet? Inget, om du inte validerar personnumret.

Ett personnummer är uppbyggt av sex siffror för födelsedatumet, två siffror för var man föddes (innan 1990) eller ett löpnummer (efter 1990), en udda siffra för män eller en jämn för kvinnor och till sist en kontrollsiffra, som är den siffra vi måste räkna ut för att bekräfta att personnumret är giltligt utformat. Du kan läsa mer på Wikipedias artikel om personummer i Sverige.

Så här ser koden jag skrev ut:

function validateSSN($personnummer = 'yymmddxxxx') { 
    $summa = 0;  
    for($i = 1; $i < 10; $i++) { 
        $del = $personnummer[$i - 1] * ($i % 2 + 1); 
        $summa += ($del > 9 ? 1 + $del % 10 : $del); 
    }   
    return !(($summa + $personnummer[9]) % 10);
}

Självklart bekräftar inte det här att det är personens riktiga personummer och om han på liknande sätt räknar ut en kontrollsiffra för ett slumpmässigt personnummer eller gissar tillräckligt länge kommer han förmodligen att kunna komma förbi valideringen. Det är ändock en viktig validering då de flesta i min erfarenhet ger upp att “förfalska” sitt personummer när de märker att deras första slumpmässiga input inte fungerar.

Uppdatering: gjorde om det till en funktion och kortade ner koden en aning.


Posted in Projects | Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *