Jag skulle behöva ett JavaScript (eller i asp-kod), en kontroll av inmatat födelsenummer i ett formulär. Varför inte skippa bindestrecken och använda två textfält, ett för de 8 första, dvs ååååmmdd och ett för de fyra sista, eller om du nu måste ha bindestrecken med i kakan, kan du använda dig av ett fält för åååå, ett för mm och ett för dd, samt ett för de fyra sista. Stämmer, bindestrecken behöver inte vara med i inmatningen.... Kontrollen av personnummer går till på följande sätt. Multiplicera omväxlande varje tal med 2 respektive 1. Jo, jag vet hur man gör kollen av kontrollsiffran.... Fick man lära sig på mattelektionerna i småskolan. För att ditt resonemang skall vara helt korrekt så skall man börja bakifrån >De (bindestrecken alltså) kan jag lägga till innan jag lägger in data i databasen. Missförstod din fråga, men på ett forum blir det lätt så. Personnummer koll
Man SKALL kunna skriva in ÅÅÅÅ-MM-DD-1234,
alltså inte endast ÅÅ-MM-DD-1234
(vilket andra kontroller kollar av, som jag sökt/hittat på här på formuet).
Man kan tänka sig ett inmatningsfält, eller två. Det "viktiga" är iaf att man kan få med hela åratalet [t.ex. 1973 el 2003] samt [-]bindestrecken.
Någon som har en färdig lösning som man kan få ta del av ;-?
// MikaelSv: Personnummer koll
Sv: Personnummer koll
"tänkte fel"....
De (bindestrecken alltså) kan jag lägga till innan jag lägger in data i databasen.
Vill dock helst ha så få fält som möjligt för att slippa att hoppa mellan flera fält vid inmatningen.
/ MSv: Personnummer koll
Ex Personnummer 560321-830
5 x 2 = 10
6 x 1 = 6
0 x 2 = 0
3 x 1 = 3
2 x 2 = 4
1 x 1 = 1
8 x 2 = 16
3 x 1 = 3
0 x 2 = 0
Du får nu en sifferföljd av 10 | 6 | 0 | 3 | 4 | 1 | 16 | 3 | 0 dvs
1060341163
Summera varje enskilt ental. 1 + 0 + 6 + 0 + 3 + 4 + 1 + 1 + 6 + 3 = 25
Kontrollsiffran, dvs den sista i ett personnummer fås därefter av det tal du behöver addera till 25 för att detta nya tal skall sluta på 0.
25 + 1 = 26
25 + 2 = 27
25 + 3 = 28
25 + 4 = 29
25 + 5 = 30 < -- Slutar på noll (0).
Alltså är kontrollsiffran 5, vilket är det tal du behöver addera på 25 för att det skall sluta på noll.
Hur du löser detta och i vilken script/kod språk är inte så svårt.
Notera att med personnummer menar man 10 siffror, inte de två första siffrorna i årtalet. Det går ju att ha med det som du vill, men i strikt formell mening är personnummer endast de två sista siffrorna i årtalet. Denna kontroll är en kontroll av att personnumret KAN vara korrekt, det är inte 100% säkert.Sv: Personnummer koll
Men det jag önskar mig, är om någon hade ett klar lösning i JavaScript (eller ev. asp-kod), då jag själv inte har den kunskapen att göra en sådan funktion i JavaScript.
Å förlåt om jag kallar ett ÅÅÅÅ-MM-DD-1234 för personnummer.....
/ MikaelSv: Personnummer koll
då stämmer detta sätt på alla kontrollsiffrekombinationer pgiro, OCR mfl.
Ex Personnummer 560321-830
0 x 2 = 0
3 x 1 = 3
8 x 2 = 16
1 x 1 = 1
2 x 2 = 4
3 x 1 = 3
0 x 2 = 0
6 x 1 = 6
5 x 2 = 10
När det är udda antal siffror spelar det ingen roll men vid jämt antal
blir ditt sätt fel. Du kan ju kolla på en OCR text på ett pgiro.
ex 901950- ? Vad blir det. ?
Så här gör Vi i Vb skall väl inte vara så svårt att Porta till Java.
<code>
Private Function KontrollSiffra(ByVal nummer As String) As String
'Regel 1. alla beräkningar sker från slutet mot början.
'Därför blir det StrReverse
'Steg för steg så du kan följa tekniken
Dim tmpStr As String, sLen As Long, strKsum As String
Dim i As Long, Ksum As Long
tmpStr = StrReverse(nummer)
sLen = Len(nummer)
'Siffror som skall multipliceras med 2
For i = 1 To sLen Step 2
strKsum = strKsum & CStr(CLng(Mid$(tmpStr, i, 1)) * 2)
Next 'i
'Siffror som skall multipliceras med 1
For i = 2 To sLen Step 2
strKsum = strKsum & Mid$(tmpStr, i, 1)
Next 'i
sLen = Len(strKsum)
'Summera alla enskilda siffror tex 16 blir 1 + 6
For i = 1 To sLen
Ksum = Ksum + CLng(Mid$(strKsum, i, 1))
Next 'i
Ksum = 10 - (Ksum Mod 10)
If Ksum = 10 Then Ksum = 0
'Returnera resultatet
KontrollSiffra = CStr(Ksum)
End Function
Private Function Reverse(ByVal nummer As String) As String
'för Vb 5 som inte har StrReverse
Dim tmpStr As String, sLen As Long, i As Long
sLen = Len(nummer)
For i = sLen To 1 Step -1
tmpStr = tmpStr & Mid$(nummer, i, 1)
Next ' i
Reverse = tmpStr
End Function
</code>Sv: Personnummer koll
Varför vill du lägga till en massa onödiga bindestreck i databasen. De kommer stå på exakt samma ställe för varje post och är extremt onödiga. Vill du ha bindestreck när du presenterar data så formatera då i så fall.Sv: Personnummer koll
Du behöver inte be om ursäkt, jag ville bara upplysa om detta då det i vissa fall kan ha betydelse. Det är fler än du som läser denna tråd.