Tjena, kontrollsiffran är det som som gör att summan blir delbar med 10.Hjälp med funktion
Behöver hjälp med nedan funktion. Håller på att skapa ett litet program till jobbet som slumpar fram namn och skapar personnummer som sedan skall matas in i en databas för testning. Programmet fungerar som det är tänkt men när jag kontrollerar mina slumpade personnummer mot http://www.personnummer.se/ så är oftast kontrollsiffra ogiltlig. Jag vet att det finns flera sidor på nätet ang. detta men ingen kod jag sett verkar fungera riktigt bra.
Någon som vet var felet ligger?
Tacksam för hjälp,
John
/// <summary>
/// Beräkna kontrollsiffran i ett personnummer
/// </summary>
/// <param name="pnr">Personnummer utan sista siffran (19800101-123).</param>
/// <returns>Kontrollsiffran.</returns>
private static int CalculateLastDigit(string pnr)
{
int kontrollsiffra = 0;
//Ta bort bindestreck samt ta bort de två första siffrorna i personnummret "18","19", "20"
pnr = pnr.Replace("-", "");
pnr = pnr.Remove(0, 2);
//----pnr = cMisc.Reverse(pnr);
char[] pnrChars = pnr.ToCharArray();
int newNumber = 0;
bool include = true;
for (int charCount = 0; charCount < pnrChars.Length; charCount++)
{
int number = Convert.ToInt32(pnrChars[charCount]);
if (include)
number *= 2;
include = !include;
if (number > 9)
number -= 9;
newNumber += number;
}
string newNumberAsString = newNumber.ToString();
string last = newNumberAsString.ToString().Substring(newNumberAsString.Length - 1);
kontrollsiffra = 10 - Convert.ToInt32(last);
if (kontrollsiffra == 10)
kontrollsiffra = 0;
return kontrollsiffra;
}Sv: Hjälp med funktion
kontrollsiffra = (1000 - newNumber) % 10
Eller:
(1000 - pnr.Select((x,y) => (x-'0')*(2 - y%2)).Select(x => x>9 ? x-9 : x).Sum()) % 10;