Quick actions

cmd+k|ctrl+k

Navigation

Languages

Personnummer

Snippet info

Language

Csharp

Visibility

public

Author

linus.aspelin

Created

2017-04-06T09:15:46Z

Updated

2017-04-06T09:15:46Z

using System;
using System.Text.RegularExpressions;
using System.Linq;
using System.Collections.Generic;

class MainClass {
    static void Main() {
        var pnr = "0001010008";
        var control = false;
        var val = 0;
        pnr = Regex.Replace(pnr, "[^0-9]", "");
        if(pnr.Length > 10)
        {
            pnr = pnr.Substring(2);
        }
        var pnrList = pnr.Select(c => (int)Char.GetNumericValue(c)).ToList();
        for(int i = 0; i < 9; i++)
        {
            var temp = 2 - i % 2;
            temp *= pnrList[i];
            val += temp % 10; // addera ental
            val += temp / 10; // addera tiotal som ental
        }
        var actual = 10 - val % 10; // invertera tiotal
        actual %= 10; // korrigera så 10 blir 0
        Console.WriteLine($"val = {val}");
        if(pnr.Length == 9)
        {
            Console.WriteLine($"Personnummer: {pnr}{actual}");
        }
        else
        {
            Console.WriteLine($"Personnummer: {pnr}");
            control = pnrList[9] == actual;
            Console.WriteLine($"Kontrollsiffran stämmer{(control ? "." : " inte!")}");
            if(!control) {
                Console.WriteLine($"Det riktiga kontrollsiffran är {actual}");
                Console.WriteLine($"Korrigerat personnummer: {pnr.Substring(0,9)}{actual}");
            }
        }
    }
}
INFO