Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  15 2870
Hei, lurte litt på om det var noen som har liggende et validerings script for personnummer i php?

Et script som sjekker opp om nummeret er matematisk riktig og evt viser kjønn og alder?

slikt som person.no har.

Setter veldig stor pris på hjelp
Har et på gammel pc, hvis du ikke finner noen andre kan jeg gjerne fyre opp gammelbeistet og få det sendt.
Trådstarter
Hadde vært utrolig bra! :-)
Sist endret av 4asd13; 6. mars 2014 kl. 19:59.
Hva skal du med ferdig script, det tar 30 min å skrive en funksjon i PHP som gjør det. Her er algorithmen.

Kode

k1 = 11 - ((3 × d1 + 7 × d2 + 6 × m1 + 1 × m2 + 8 × å1 + 9 × å2 + 4 × i1 + 5 × i2 + 2 × i3) mod 11)

k2 = 11 - ((5 × d1 + 4 × d2 + 3 × m1 + 2 × m2 + 7 × å1 + 6 × å2 + 5 × i1 + 4 × i2 + 3 × i3 + 2 × k1) mod 11).
Sitat av 0xFF Vis innlegg
Hva skal du med ferdig script, det tar 30 min å skrive en funksjon i PHP som gjør det. Her er algorithmen.

Kode

k1 = 11 - ((3 × d1 + 7 × d2 + 6 × m1 + 1 × m2 + 8 × å1 + 9 × å2 + 4 × i1 + 5 × i2 + 2 × i3) mod 11)

k2 = 11 - ((5 × d1 + 4 × d2 + 3 × m1 + 2 × m2 + 7 × å1 + 6 × å2 + 5 × i1 + 4 × i2 + 3 × i3 + 2 × k1) mod 11).
Vis hele sitatet...

Hvorfor bruke 30 min på å finne opp et krutt noen allerede har liggende?
Sitat av Cikey Vis innlegg
Hvorfor bruke 30 min på å finne opp et krutt noen allerede har liggende?
Vis hele sitatet...
Hvorfor bruke 3,5 timer på å leiter etter et script som TS nå har gjort? Og 30 minutter var litt mye på en slik funksjon, toppen 10 minutter.
Haxxor ja :P

Du klarer vel å skrive en php-versjon av javascriptet på siden du refererer til?
Her er kilden: http://person.no/person.js
Det er helt vilt at ingen klarer å gi TS et brukbart svar. Jeg brukte litt over 20 minutter på å skrive funksjonen på en telefon. Formateringen kan være noe smal, men dette skyldes at telefon skjermen ikkje er så brei.

pastebin.com/Cercyr5v
Skulle bare nevne sånn på siden, at det i mange tilfeller vil være direkte straffbart å oppbevare personnummer uten en veldig god grunn og varsel til Datatilsynet. Ikke at jeg sier du gjør det, men sånn i tilfelle.
Sitat av fuzzy76 Vis innlegg
Skulle bare nevne sånn på siden, at det i mange tilfeller vil være direkte straffbart å oppbevare personnummer uten en veldig god grunn og varsel til Datatilsynet. Ikke at jeg sier du gjør det, men sånn i tilfelle.
Vis hele sitatet...
Det er vel hvis man har tallene til det man vet er personer? En generator vil gi mye søppel, og å straffe noen for å ha en liste hvor man innimellom vil finne personnr blir som å straffe alle som kan algoritmen for personnr, som er veldig lett.

Loven gjelder nok heller folk som oppgir personnr når de skal kjøpe en tjeneste, og det blir lagret mot deres viten over tid.
Trådstarter
Skal ikke lagre noe ;-)
Sitat av fuzzy76 Vis innlegg
Skulle bare nevne sånn på siden, at det i mange tilfeller vil være direkte straffbart å oppbevare personnummer uten en veldig god grunn og varsel til Datatilsynet. Ikke at jeg sier du gjør det, men sånn i tilfelle.
Vis hele sitatet...
Slik jeg leser det kan man oppbevare personnummer om man har er reelt behov for det og man får samtykke av personne selv. Tror ikke man må varsle Datatilsynet, men det vil selvsagt være tryggest å gjøre det.
En regex versjon jeg postet for 4-år siden,er vel fortsatt grei.
PHP-fisert skulle det bli noe i denne stilen.

Kode

if (preg_match('/(?:\b(?:0[1-9]|[12]\d|3[01])(?:[04][1-9]|[15][0-2])\d{7}\b)\Z/s', $pers_numb)) {
	// Successful match
} else {
	// Match failed
}
og evt viser kjønn og alder?
Vis hele sitatet...
Viss du ser på oppbygging av personnummer,bør du raskt kunne skrive kode hvor du finner dette.
F.eks kjønn tall 9,kvinner har partall,menn har oddetall.

Kode

>>> pers_numb = '24418023232'
>>> tall_9 = int(pers_numb[8]) % 2
>>> result = "Mann" if tall_9 else "Kvinne"
>>> result
'Kvinne'
Bruke et dato bibliotek vil være naturlig for og finne alder.

@0xFF det er et problem med H-nummer i koden din,f.eks "24418023232" er et korrekt personnummer.
H-nummer(månedene teller fra 41 for januar til 52 for desember)
Sist endret av snippsat; 8. mars 2014 kl. 13:14.
Trådstarter
Sitat av snippsat Vis innlegg
En regex versjon jeg postet for 4-år siden,er vel fortsatt grei.
PHP-fisert skulle det bli noe i denne stilen.

Kode

if (preg_match('/(?:\b(?:0[1-9]|[12]\d|3[01])(?:[04][1-9]|[15][0-2])\d{7}\b)\Z/s', $pers_numb)) {
	// Successful match
} else {
	// Match failed
}
Viss du ser på oppbygging av personnummer,bør du raskt kunne skrive kode hvor du finner dette.
F.eks kjønn tall 9,kvinner har partall,menn har oddetall.

Kode

>>> pers_numb = '24418023232'
>>> tall_9 = int(pers_numb[8]) % 2
>>> result = "Mann" if tall_9 else "Kvinne"
>>> result
'Kvinne'
Bruke et dato bibliotek vil være naturlig for og finne alder.

@0xFF det er et problem med H-nummer i koden din,f.eks "24418023232" er et korrekt personnummer.
H-nummer(månedene teller fra 41 for januar til 52 for desember)
Vis hele sitatet...
Prøvde koden din, men da viser den ikke om et personnummer ikke stemmer overens med kontroll nummerene.

har du en løsning på dette også?
har du en løsning på dette også?
Vis hele sitatet...
Står greit forklart her
Koden til 0xFF virker som den skal,sjekker også kontrollsifre.
Noe jeg glemte så "24418023232" er ikke et korrekt personnummer.

Viss skrive noe kode utifra linken,blir det noe i denne stilen i Python.
En PHP versjon kan du jo prøve på selv.

Kode

def control_numb(pers_numb):
    numberlist_1 = [3, 7, 6, 1, 8, 9, 4, 5, 2, 1]
    numberlist_2 = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2, 1]
    first_k = [int(i) for i in list(pers_numb)[:-1]]
    second_k = [int(i) for i in list(pers_numb)]
    sum_first_k = sum(a*b for a,b in zip(numberlist_1, first_k))
    sum_second_k = sum(a*b for a,b in zip(numberlist_2, second_k))
    if sum_first_k % 11 == 0 and sum_second_k % 11 == 0:
        return True
    return False
Test.

Kode

>>> pers_numb = '31129956715'
>>> control_numb(pers_numb)
True
>>> pers_numb = '24418023232'
>>> control_numb(pers_numb)
False
Sist endret av snippsat; 9. mars 2014 kl. 13:22.