Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Algoritme til check af cpr-numre soeges

126 views
Skip to first unread message

Niels Graverholt

unread,
Feb 10, 1996, 3:00:00 AM2/10/96
to
Er der en, som kan hjaelpe med en stump program (gerne pascal, c++) til
at checke at cpr-numre er korrekte

p.f.t.
Niels

Gerner Mortensen

unread,
Feb 11, 1996, 3:00:00 AM2/11/96
to
On 10 Feb 1996 22:44:58 GMT, ng...@inet.uni-c.dk (Niels Graverholt)
wrote :

>Er der en, som kan hjaelpe med en stump program (gerne pascal, c++) til
>at checke at cpr-numre er korrekte
>

Der skal såmen ikke meget til, da alle personnumre er lavet med modulo
11 reglen, så skal de blot checkes med modulo 11 reglen.

Da enhver med kendskab til modulo 11 reglen kan lave et gyldigt
cpr-nr. er et check vel ikke så meget værd ? Ok, der er nogle
faldgruber hen ad vejen, men dem kan man jo have kendskab til.
Bla.a. holdt man i midten af 70'erne op med at bruge løbenr. under
1000 og så sparer man vist løbenr. fra 5000-9999 til personer født i
forige århundrede.
(Jeg tror også invandrere får tildelt løbenr. i den første del af
serien 1000-4999 for hver fødselsdag der beregnes cprnr. til)

Dengang en hjemmekomputer kun kunne programmeres i basic (de gode af
dem), var der også meget skæg med basicprogrammer til generering af
cpr-nr.
På bare 1 fødselsdag, kom der hundredevis af godkendte cpr-nr.(eller
godt 350 stk.)

Modulo 11 reglen er 4327654321, hvor 4 ganges med 1 ciffer
3 - - 2 -
2 - - 3 -
7 - - 4 -
.
.
.
1 - - 10 -

Alle produkterne lægges sammen og checkes om summen kan divideres med
11 uden der bliver rest.

Så check af cprnr. kan altså ske med en lommeregner med de 4
regnearter +, -, * og /.

Generering af gyldige cprnr. sker bedst i en komputer, da der skal
checkes for alt muligt inden 1 af de mulige 350 cprnr. kan "bruges".

--

\/
___m_oo_m___

Gerner.
http://inet.uni-c.dk/~gerner1
The worlds most boring web page.
NO hyper/super links to nowhere.

Jens Steiner (s8 jorgen)

unread,
Feb 13, 1996, 3:00:00 AM2/13/96
to

>Da enhver med kendskab til modulo 11 reglen kan lave et gyldigt
>cpr-nr. er et check vel ikke så meget værd ? Ok, der er nogle
>faldgruber hen ad vejen, men dem kan man jo have kendskab til.

Efter hvad jeg har hørt, er formålet først og fremmest at opdage,
når de kommunale skrankedamer og -herrer taster forkert.

Modulo 11 reglen har i den forbindelse den fordel, at fejl,
der begrænser sig til et enkelt ciffer, altid vil blive opdaget.

Min kilde er et nummer af Illustreret Videnskab, jeg læste engang.
Vistnok for 5-10 år siden. Deri kan Niels Graverholt finde en udmærket
beskrivelse af, hvordan man genererer og tjekker cpr-numre - dog
uden tilhørende Pascal eller C++ kode.

-- Jens Steiner

da...@vnet.ibm.com

unread,
Feb 15, 1996, 3:00:00 AM2/15/96
to
In <4fj75a$r...@news.uni-c.dk>, ng...@inet.uni-c.dk (Niels Graverholt) writes:
>Er der en, som kan hjaelpe med en stump program (gerne pascal, c++) til
>at checke at cpr-numre er korrekte

Det har jeg, men jeg har koden derhjemme. Poster det imorgen.

Dan
da...@vnet.ibm.com

da...@vnet.ibm.com

unread,
Feb 16, 1996, 3:00:00 AM2/16/96
to
In <4fj75a$r...@news.uni-c.dk>, ng...@inet.uni-c.dk (Niels Graverholt) writes:
>Er der en, som kan hjaelpe med en stump program (gerne pascal, c++) til
>at checke at cpr-numre er korrekte

Den følgende funktion returnerer true hvis cpr nummeret er korrekt:

Boolean ValidationFilter :: validateCPR( const IString& string )
{
IString str( string );
long lFactors[11] = { 4, 3, 2, 7, 6, 5, 0, 4, 3, 2, 1 };
long lSum(0);

str[7] = '0'; // fjerner lige bindestregen
if ( str.isDigits() ) { // så dette skulle blive sandt
for ( long lIndex = 0; lIndex < 11; lIndex++ )
lSum += (str[ lIndex + 1 ] - '0') * lFactors[ lIndex ];
}

return ( lSum % 11 ) ? false : true;
}

Der er lige en detalje ved cpr numre som ikke alle ved:
De to midterste tegn i de fire sidste tegn i cpr nummeret KAN være bogstaver,
det er noget med udlændinge og nyfødte der endnu ikke har fået et rigtigt
cpr nummer. Eks. 070568-2ab1, om der er nogen regler for dette ved jeg ikke!

Håber det kan bruges.

Dan
da...@vnet.ibm.com

0 new messages