Det här projektet är en C#-baserad konsolapplikation för att verifiera svenska personnummer. Nedan finner du dokumentation om hur du kan köra och testa applikationen både lokalt och genom att använda Docker-container.
För att köra och testa applikationen lokalt, följ stegen nedan:
-
Klona projektet från GitHub: bash
git clone https://github.com/Acrozi/Personnummer-validation.git
-
Navigera till projektmappen: bash
cd Personnummer-validation
-
Öppna projektet i din C#-utvecklingsmiljö t.ex., Visual Studio eller VS Code.
-
Bygg projektet: bash
dotnet build
-
Kör applikationen: bash
dotnet run
-
Använd applikationen för att verifiera personnummer: Följ instruktionerna som visas i konsolen för att ange ett svenskt personnummer och se resultatet av verifieringen.
-
Kör enhetstester: bash
dotnet test
Se resultaten av enhetstesterna för att säkerställa korrekt funktionalitet.
För att korrekt installera och köra programmet "Personnummer Validation" via Docker, följ dessa steg:
-
Se till att Docker är korrekt installerat och att Docker Desktop körs. Kontrollera att Docker Daemon är igång. (https://www.docker.com/products/docker-desktop/)
-
Använd kommandot
docker pull acrozi/personnummer_validation-docker
för att hämta Docker-bilden från Docker Hub och ladda ner den lokalt. -
Använd kommandot
docker images
för att visa en lista över alla lokalt sparade Docker-images. Kontrollera attacrozi/personnummer_validation-docker
finns i listan. -
Använd kommandot
docker run acrozi/personnummer_validation-docker
för att köra programmet i en Docker-container. För Windows-användare som använder en terminal som stöder interaktivt läge kan du använda kommandot utan winpty. Om du har problem med det, prova med kommandotwinpty docker run -it acrozi/personnummer_validation-docker
. Kommandot-it
möjliggör att vi kan köra programmet interaktivt vilket gör att vi kan mata in data. -
Följ instruktionerna i terminalen för att interagera med programmet. Ange personnummer när det efterfrågas.
Via github actions skapas ett körbart program.
-
Gå in på webbsidan https://github.com/Acrozi/Personnummer-validation/actions/runs/7572835865/artifacts/1178651670
-
Ladda ned och packa upp zip-filen och kör programmet.
-
Följ instruktionerna i terminalen för att interagera med programmet. Ange personnummer när det efterfrågas.
För att säkerställa korrekt funktionalitet har enhetstester skapats med hjälp av xUnit-ramverket. Några av de testade scenarierna inkluderar:
-
Validering av personnummer med korrekt format.
-
Ogiltiga personnummer i olika format som förväntas returnera false.
-
Hämtning av könet baserat på näst sista siffran i giltiga personnummer.
-
Kastning av ArgumentException vid försök att hämta kön från ett ogiltigt personnummer.
-
Projektstruktur:
Projektet innehåller två projekt
PersonNummerValidationTool: Huvudprojektet som innehåller kodfilen SwedishPersonalNumberValidator.cs. xUnitTest: Projektet som innehåller xUnit-testerna för att validera koden
Personnummer är ett nummer som Skatteverket tilldelar personer folkbokförda i Sverige för att identifiera dem hos bland annat myndigheter. Systemet, som var det första i världen som omfattade ett lands hela befolkning, infördes 1 januari 1947.
Ett personnummer är uppbyggt av 10 siffror indelade i två grupper om 6 respektive 4 siffror. Grupperna är åtskilda med ett skiljetecken, normalt ett bindestreck (-).
Ett personnummer kan matas in på olika sätt, bland annat genom 12 siffror, 10 siffror med bindestreck eller 10 siffror utan bindestreck.
För att kontrollera detta använder programmet funktionen IsValid
:
public static bool IsValid(string personalNumber)
{
// Ta bort bindestreck om de finns
personalNumber = personalNumber.Replace("-", "");
// Konvertera 12-siffrigt format till 10-siffrigt format
if (personalNumber.Length == 12)
{
personalNumber = personalNumber.Substring(2, 10);
}
// Check if the length is correct
if (personalNumber.Length != 10)
{
return false;
}
// Extract the birthdate part based on the format
string birthdatePart = personalNumber.Substring(0, 6);
// Extract the serial number part
string serialNumberPart = personalNumber.Substring(personalNumber.Length - 4, 3);
// Extract the checksum
int checksum = int.Parse(personalNumber.Substring(personalNumber.Length - 1, 1));
// Concatenate the birthdate and serial number for checksum calculation
string fullNumberForChecksum = birthdatePart + serialNumberPart;
// Calculate the checksum
int calculatedChecksum = CalculateChecksum(fullNumberForChecksum);
// Check if the calculated checksum matches the provided checksum
return checksum == calculatedChecksum;
}
Genom att kontrollera den nionde siffran i personnumret kan vi avgöra om personen är en man eller en kvinna, jämn siffra för kvinnor och udda siffra för män.
Detta kontrollerar programmet genom funktionen GetGender
:
public static string GetGender(string personalNumber)
{
// Ta bort eventuella bindestreck
personalNumber = personalNumber.Replace("-", "");
// Kontrollera om personnumret är giltigt innan du fortsätter
if (!IsValid(personalNumber))
{
throw new ArgumentException("Invalid personal identity number or gender", nameof(personalNumber));
}
// Hämta den näst sista siffran (index 8 för 10-siffrigt format)
char secondToLastDigit = personalNumber[personalNumber.Length - 2];
// Avgör kön baserat på den näst sista siffran
return (secondToLastDigit % 2 == 0) ? "Female" : "Male";
}
Personnummer kan beräknas för att se om det är äkta. Detta görs genom att man multiplicerar de 9 första siffrorna med omväxlande 2 och 1.
De respektive siffersummorna adderas. Om man adderar kontrollsiffran(sista siffran) till denna summa skall man få ett tal jämt delbart med 10.
Detta kontrollerar programmet genom funktionen CalculateChecksum
:
static int CalculateChecksum(string number)
{
int sum = 0;
// Multiply each digit by 2 for odd positions
for (int i = 0; i < number.Length; i++)
{
int digit = int.Parse(number[i].ToString());
int multiplier = (i % 2 == 0) ? 2 : 1;
int product = digit * multiplier;
// Add the digits of the product
sum += product / 10 + product % 10;
}
// Calculate the checksum
int checksum = (10 - (sum % 10)) % 10;
return checksum;
}
Svenska personnummer följer ett specifikt format och har regler för att bestämma dess giltighet. Applikationen genomför kontroller för att säkerställa att personnumret är korrekt enligt dessa regler.
För ytterligare detaljer och användning, se dokumentationen i källkoden och README.md filen i GitHub. Lycka till med användningen av personnummerkontroll applikationen!