Avatar billede nyholm Novice
23. november 2006 - 22:00 Der er 15 kommentarer og
1 løsning

Giltigt personnummer

Ær det någon som har en bra kod før att avgøra om ett giltigt personnummer har angetts. Jag vet inte om ni anvænder 10-siffriga personnummer dær sista siffran ær en kontrollsiffra.
Avatar billede mugs Novice
23. november 2006 - 22:04 #1
Jeg forstår ikke hvad du mener.

Men hvis du mener danske CPR-numrer er en kontrol af et sådant nummer ikke meget værd mere, idet det danske CPR-nummer system står overfor en revidering. Der er ikke længere plads til flere 10-cifrede CPR-numrer, og men vil derfor tildele det et ekstra ciffer.
Avatar billede -anders- Juniormester
23. november 2006 - 22:07 #2
Enig med mugs, men prøv at kikke her http://www.makeiteasy.dk/Home.asp?ContentID=32, måske det er noget du kan bruge/tilrette
Avatar billede thesurfer Nybegynder
23. november 2006 - 22:30 #3
Jeg tror at spørgsmålet oversættes til følgende:

"Er der nogen der har en (god) kodestump, for at afgøre om det er et gyldigt personnummer der er angivet. Jeg ved ikke om de anvender 10-cifret personnummer, hvor sidste ciffer er et kontrolciffer"

Hvis det er det der står, kan http://www.makeiteasy.dk/Home.asp?ContentID=32 bruges..

Ellers forstår jeg ikke spørgsmålet.. :-)
Avatar billede erikjacobsen Ekspert
23. november 2006 - 22:33 #4
Det danske personnummer forsætter med at være 10-cifret. Der bliver ikke tildelt et ekstra ciffer.
Men på et tidspunkt vil der komme personnumre, der ikke overholder checksumberegningen med kontrolciffer, og dermed bør IT-systemer forberedes forberedes for at kunne slå en sådan beregningen fra. Læs mere: http://www.cpr.dk/Index/dokumenter.asp?o=2&n=0&d=647&s=4
Avatar billede nyholm Novice
23. november 2006 - 23:34 #5
Det svenska personnummret kontrolleras annorlunda.
Ex. en person som ær fødd 30/3 år 1960 har som førsta 6 siffror 600330 med tillægg av 4 siffror varav den fjærde ær kontrollsiffra. Sæg att personnummret ær
600330-039X, dær X ær kotrollsiffra. Før att få fram kontrollsiffran multipliceras færsta siffran med 1, andra med 2, tredje med 1, fjærde med 2,........
Du får så 12, 0, 0, 3, 6, 0, 0, 3 och 18. Nu adderas varje enskild siffra, 1+2+0+2+3+6+0+0+3+1+8 = 24. Detta tal subraheras från næsta 10-tal, 30-24 = 6.
Kontrollsiffran ær således 6. Det komletta personnummret blir 600330-0396.
Avatar billede nyholm Novice
23. november 2006 - 23:40 #6
Før att avgøra køn tittar man på tredje tillæggssiffran. Om siffran ær jæmn så ær den en kvinna och ojæmn før en man. I ex. ovan ær personen således en man (9).
Avatar billede thesurfer Nybegynder
23. november 2006 - 23:46 #7
Hmm.. Det forstår jeg ikke helt:

Man multiplicerer med 1, 2, 1, 2, 1, 2 ?

Så får man: 6 * 1, 0 * 2, 0 * 1, 3 * 2, 3 * 1, 0 * 2, 0 * 1, 3 * 2, 9 * 1, x * 2

Eller hvad?
Avatar billede nyholm Novice
23. november 2006 - 23:57 #8
Du beræknar på de 9 førsta siffrorna før att få den 10.de. Du skall kontrollera om Berækningen på de 9 førsta siffrorna stæmmer med den 10.de.
Berækningen enligt ovan ger talet 6, som skall vara den 10.de siffran før att det skall vara ett giltigt personnummer.
Avatar billede nyholm Novice
24. november 2006 - 00:02 #9
Sorry! Jag har skrivit fel i beskrivningen. Den førsta siffran multipliceras med 2, andra med 1, tredje med 2, osv till nionde siffran * 2.
Avatar billede thesurfer Nybegynder
24. november 2006 - 00:32 #10
Ok... Så er det:

6 * 2 = 12
0 * 1 = 0
0 * 2 = 0
3 * 1 = 3
3 * 2 = 6
0 * 1 = 0
0 * 2 = 0
3 * 1 = 3
9 * 2 = 18

Denne linie: "Detta tal subraheras från næsta 10-tal, 30-24 = 6"

Vil det sige, hvis "1 + 6 + 9 + .... = 43", så er det sidste tal: 50 - 43 = 7 ?
Avatar billede nyholm Novice
24. november 2006 - 00:57 #11
Svar: Ja.
Avatar billede thesurfer Nybegynder
24. november 2006 - 02:10 #12
Sådan:

function check_personnummer(cprnr)
cprnr = replace(cprnr, "-", "")
cprnr = replace(cprnr, " ", "")

dim a,b,c,d,e,f,g,h,i
a = CInt(mid(cprnr, 1,1)) * 2
b = CInt(mid(cprnr, 2,1)) * 1
c = CInt(mid(cprnr, 3,1)) * 2
d = CInt(mid(cprnr, 4,1)) * 1
e = CInt(mid(cprnr, 5,1)) * 2
f = CInt(mid(cprnr, 6,1)) * 1
g = CInt(mid(cprnr, 7,1)) * 2
h = CInt(mid(cprnr, 8,1)) * 1
i = CInt(mid(cprnr, 9,1)) * 2

dim strTal
strTal = "" & a & b & c & d & e & f & g & h & i

dim plus,tal
plus = 0
tal = 0

dim x
for x = 1 to len(strTal)
    tal = CInt(mid(strTal, x, 1))
    plus = plus + tal
next

dim kontrol
kontrol = -1 ' nulstil kontrol
for x = plus to plus + 10
    if x mod 10 = 0 then
        kontrol = x - plus
        exit for
    end if
next

dim is_ok
is_ok = false

if CInt(right(cprnr, 1)) = kontrol then is_ok = true

check_personnummer = is_ok
end function

msgbox check_personnummer("600330-0396") ' OK
msgbox check_personnummer("600330-0395") ' Fejl/fel
Avatar billede nyholm Novice
24. november 2006 - 10:28 #13
Tack før ditt førslag thesurfer!
Jag behøver hjælp med hur jag kallar på functionen att gøra kontrollen.
Personnummret finns hær: "Forms.Forare.Personnr".
Avatar billede thesurfer Nybegynder
24. november 2006 - 10:51 #14
Jeg kender ikke så meget til VBA i Access..

Måske er det: msgbox check_personnummer(Forms.Forare.Personnr.Text)
Avatar billede nyholm Novice
24. november 2006 - 11:16 #15
Jag fick det slut att fungera.
Tack før hjælpen thesurfer!
Ge mig ett svar så får du dina points.
Avatar billede thesurfer Nybegynder
24. november 2006 - 11:58 #16
OK :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester