Sådan aflæser du stregkoden på sygesikringskortet

Gæsteindlæg skrevet af Casper Schneidereit for 1 decade siden | Se alle indlæg

I dette indlæg vil jeg forklare, hvordan det lykkedes mig at finde frem til 5 personers fulde CPR nummer via internettet og lidt teknisk indsigt i sygesikringskortet.

Problemet opstår, når et autentisk sygesikringskort bliver fotograferet, og billedet efterfølgende bliver trykt i en avis eller udgivet på nettet. Da fotografen ikke er dum, bliver CPR nummeret naturligvis sløret. Men det er desværre ikke nok, da stregkoden også indeholder det fulde CPR nummer.

Prøv at se nedenstående billede jeg har fundet (de røde felter har jeg sat ind):

Sygesikringskort uden sløret stregkode

Som du kan se er "de sidste 4" cifre i CPR nummeret samt noget af adressen sløret. Problemet er, at det stadigvæk er muligt at trække hele CPR nummeret ud via dette billede (hvis jeg ikke havde sat de røde bokse for).

Stregkoden der er i bunden indeholder (som tidligere nævnt) også CPR nummeret. Stregkoden er "skrevet i" Code 128 og kan aflæses sådan her:

Du læser fra venstre mod højre. Der er 4 tykkelser af streger, og du skal læse både hvide og sorte streger.

De første 6 streger er "start" angivelse (statisk)
De næste 6 streger er "dagen".
De næste 6 streger er "måneden".
De næste 6 streger er "året".
De næste 6 streger er første 2 cifre af "de sidste 4".
De næste 6 streger er sidste 2 cifre af "de sidste 4"
De næste 6 streger er en "checksum" (dynamisk)
De sidste 7 streger er "slut" angivelse. (statisk)

Stregkoden slutter og starter altid med en sort streg. Hvis du har forstået det rigtigt, så skulle du gerne aflæse de første 6 streger på dit sygesikringskort som følgende værdi 211232, hvilket er lig med Start Code C (se den fulde tabel her).

Med checksum feltet kan du sikre dig, at CPR nummeret er aflæst korrekt. Du finder information om, hvordan checksummen er beregnet på wikipedia.

Via nogle simple Google søgninger, kan du finde en masse forskellige fotograferede sygesikringskort. Mange er dummy/Anders And kort, men flere er også autentiske. Selvom opløsningen og kvaliteten er svingende, kan du med Photoshop i hånden nemt udlede om en streg er tykkelse 1,2,3 eller 4.

Jeg har lavet et lille værktøj, der kan danne en stregkode udfra et CPR nr og finde værdien af en række aflæste streger.

Overstående værktøj er ikke fuldstændig gennemtestet. Finder du en fejl, så smid en kommentar. Du kan også benytte nedenstående tabel, til at finde værdien af en række streger.

Sorteret efter værdi 

start = 211232
0 = 212222
1 = 222122
2 = 222221
3 = 121223
4 = 121322
5 = 131222
6 = 122213
7 = 122312
8 = 132212
9 = 221213
10 = 221312
11 = 231212
12 = 112232
13 = 122132
14 = 122231
15 = 113222
16 = 123122
17 = 123221
18 = 223211
19 = 221132
20 = 221231
21 = 213212
22 = 223112
23 = 312131
24 = 311222
25 = 311222
26 = 321221
27 = 312212
28 = 322112
29 = 322211
30 = 212123
31 = 212321
32 = 232121
33 = 111323
34 = 131123
35 = 131321
36 = 112313
37 = 132113
38 = 132311
39 = 211313
40 = 231113
41 = 231311
42 = 112133
43 = 112331
44 = 132131
45 = 113123
46 = 113321
47 = 133121
48 = 313121
49 = 211331
50 = 231131
51 = 213113
52 = 213311
53 = 213131
54 = 311123
55 = 311321
56 = 331121
57 = 312113
58 = 312311
59 = 332111
60 = 314111
61 = 221411
62 = 431111
63 = 111224
64 = 111422
65 = 121124
66 = 121421
67 = 141122
68 = 141221
69 = 112214
70 = 112412
71 = 122114
72 = 122411
73 = 142112
74 = 142211
75 = 241211
76 = 221114
77 = 413111
78 = 241112
79 = 134111
80 = 111242
81 = 121142
82 = 121241
83 = 114212
84 = 124112
85 = 124211
86 = 411212
87 = 421112
88 = 421211
89 = 212141
90 = 214121
91 = 412121
92 = 111143
93 = 111341
94 = 131141
95 = 114113
96 = 114311
97 = 411113
98 = 411311
99 = 113141
100 = 114131
101 = 311141
102 = 411131
stop = 2331112

Eksempler på afkodning udfra diverse artikler

Det er lykkedes mig at finde frem til CPR nummer + navn + adresse, udfra billederne i artiklerne herunder. CPR nummer og checksum har passet sammen. Komisk at det ene billede netop benyttes i forbindelse med en artikel om identitetstyveri :-). Endnu en gang har jeg indsat de røde bokse.

eksempel 1

eksempel 2

Kode (PHP) til at danne stregkode

<?php
define
("hoejde_i_px"100);
define("min_bredde_i_px"4);
$data = array('start'=>211232// Vægtet 105
              
0=>212222,
              
1=>222122,
              
2=>222221,
              
3=>121223,
              
4=>121322,
              
5=>131222,
              
6=>122213,
              
7=>122312,
              
8=>132212,
              
9=>221213,
              
10=>221312,
              
11=>231212,
              
12=>112232,
              
13=>122132,
              
14=>122231,
              
15=>113222,
              
16=>123122,
              
17=>123221,
              
18=>223211,
              
19=>221132,
              
20=>221231,
              
21=>213212,
              
22=>223112,
              
23=>312131,
              
24=>311222,
              
25=>311222,
              
26=>321221,
              
27=>312212,
              
28=>322112,
              
29=>322211,
              
30=>212123,
              
31=>212321,
              
32=>232121,
              
33=>111323,
              
34=>131123,
              
35=>131321,
              
36=>112313,
              
37=>132113,
              
38=>132311,
              
39=>211313,
              
40=>231113,
              
41=>231311,
              
42=>112133,
              
43=>112331,
              
44=>132131,
              
45=>113123,
              
46=>113321,
              
47=>133121,
              
48=>313121,
              
49=>211331,
              
50=>231131,
              
51=>213113,
              
52=>213311,
              
53=>213131,
              
54=>311123,
              
55=>311321,
              
56=>331121,
              
57=>312113,
              
58=>312311,
              
59=>332111,
              
60=>314111,
              
61=>221411,
              
62=>431111,
              
63=>111224,
              
64=>111422,
              
65=>121124,
              
66=>121421,
              
67=>141122,
              
68=>141221,
              
69=>112214,
              
70=>112412,
              
71=>122114,
              
72=>122411,
              
73=>142112,
              
74=>142211,
              
75=>241211,
              
76=>221114,
              
77=>413111,
              
78=>241112,
              
79=>134111,
              
80=>111242,
              
81=>121142,
              
82=>121241,
              
83=>114212,
              
84=>124112,
              
85=>124211,
              
86=>411212,
              
87=>421112,
              
88=>421211,
              
89=>212141,
              
90=>214121,
              
91=>412121,
              
92=>111143,
              
93=>111341,
              
94=>131141,
              
95=>114113,
              
96=>114311,
              
97=>411113,
              
98=>411311,
              
99=>113141,
              
100=>114131,
              
101=>311141,
              
102=>411131,
              
'stop'=>2331112); // Vægtet 106

function _tegn_barcode($nummer) {
    global 
$data;
    
$t = (string) $data[$nummer];
    
$antal_tegn strlen($t);
    
$farve 'sort'
    
$html.='<!-- '.$t.' -->'."\n";
    for(
$i=0;$i<$antal_tegn;$i++) {
        
$bredde min_bredde_i_px*$t{$i};
        
$html.='<div style="width:'.($bredde).'px; height: '.
               
hoejde_i_px.'px;" class="barcode '.$farve.'"><!-'.$t.'-></div>'."\n";
        
$farve == 'sort' $farve='hvid' $farve 'sort';
        
$bredde_total += $bredde;
    }
    
$html.='<!-- /// '.$t.' /// -->'."\n";
    return 
$html;
}
function 
cpr($d,$m,$a,$s1,$s2) {
    
$checksum = (105 1*$d 2*$m 3*$a 4*$s1 5*$s2) % 103;

    
$html.=    _tegn_barcode('start');
    
$html.=    _tegn_barcode($d);
    
$html.=    _tegn_barcode($m);
    
$html.=    _tegn_barcode($a);
    
$html.=    _tegn_barcode($s1);
    
$html.=    _tegn_barcode($s2);
    
$html.=    _tegn_barcode($checksum);
    
$html.=    _tegn_barcode('stop');
    return 
$html;
}
?>

Har du lyst til at hjælpe os?
Kunne du lide indlægget, så ville vi blive oprigtig glad, hvis du delte dette indlæg med dit netværk.



» Se andre indlæg her.

Kommentarer til indlæg

Rosenstand   for 1 decade siden.

Altså Casper... Hvis bare alle nørder var som dig! Så ville verden sgu være et sjovere sted :-)


Àsgeir Gunnarsson   for 1 decade siden.

Casper, hvordan har den egentlig genereret stregkoden?
og hvorfor har du valgt at lave stregkoden med HTML og CSS ? I stedet for at genere et billede? :)


John Nielsen   for 1 decade siden.

Fantastisk godt indlæg med en skræmmende pointe.

Tog lige en billedesøgning på "sygesikringsbevis" på Google, og straks kom nogle dårligt maskerede plastikkort frem, hvor stregkoden stadig var læselig.
Det tog, som du ganske rigtigt skriver, ganske få sekunder at finde et validt CPR-nummer.

Skræmmende, ganske enkelt skræmmende. :o)


Morten   for 1 decade siden.

Man må håbe, at nogle journalister følger med her...
Har aldrig forstået pointen med, at benytte et billed af et rigtig sygesikringskort, dog med sløret informationer. Man kan i dag lave billeder, som ligner et ægte, men så er alle sikret imod misbrug... Men det skal åbenbart være "the real deal"...


Jesper   for 1 decade siden.

Godt indlæg. Fint beskrevet.
Men hvad er frygten for et offentligt kendt cpr nummer baseret på?
Identitesttyveri?


Casper Schneidereit   for 1 decade siden.

Rosenstand @ Ja, det er utroligt hvad man kan få ud af en fredag eftermiddag :-)!

Asgeir @ Jeg har tilføjet koden der laver stregkoden. Det var bare den nemmeste måde, at lave et tool der kunne demonstrerer pointen :-).

John Nielsen @ Ja. Det er faktisk ret skræmmende. Specielt når der er så meget tillid til, at CPR nr. er en hundredprocent sikker identifikation af en person.

Morten @ Ja, eller finde nogle 999999-9999 kort på Google.

Jesper @ Prøv at se her http://bit.ly/vRZ4hE


Thomas Frost   for 1 decade siden.

Meget interessant. Du går og roder med nogle spændende ting for tiden :)


Bjarke Klüwer   for 1 decade siden.

Man behøver ikke engang anstrenge sig, for at læse stregkoden på et sløret sygesikringskort. En simpel barcode scanner app installeret på en smartphone læser en stregkode på et sygesikringskort helt fint.


Casper Schneidereit   for 1 decade siden.

Bjarke @ Jeg prøvede lige et der var rimelig sløret (fra en netartikel), her måtte min App. give op. Men manuelt kunne jeg godt udlede CPR nr. Det tog under 10 min, der skulle dog et par aflæsninger til.


Jesper Normann   for 1 decade siden.

Imponerende og skræmmende på én gang :-) Hvordan kommer du dog på sådanne ideer?


Casper Schneidereit   for 1 decade siden.

Det er en længere historie. Jeg læste en artikel, hvor der var et foto af sygesikringskort, uden sløret stregkode. Så kom jeg til at tænke på, at jeg har oplevet biblioteker kunne scanne stregkoden, og få mit CPR nr. Slutteligt kunne jeg huske en artikel, hvor jeg havde læst om netop stregkoder, og specielt den som benyttes på sygesikringskortet. Udfra det valgte jeg at undersøge det lidt nærmere.


Jesper Normann   for 1 decade siden.

Nå sådan :-) Lidt nørdet, men ganske underholdende.


Gita Street   for 1 decade siden.

Du er da genial, mand :-) Det er vildt godt set.


Morten   for 1 decade siden.

Interessant blog indlæg, jeg tror du har ret i at det er nemt at finde folks cpr numre på denne måde, det er enlig ret skræmmende

tak for et gennemarbejdet indlæg

Mvh Morten


Lars Bachmann   for 1 decade siden.

Det er sgu meget godt tænkt. :)

Det vil jeg da lige prøve at lege lidt med..


Lars Bachmann   for 1 decade siden.

Prøvede lige at google "sygesikringskort", og fandt nogle som jeg kunne scanne med min "barcode Scanner app" på min HTC, og den kunne udlæse CPR nummeret på de fleste.. skræmmende.


Casper Schneidereit   for 1 decade siden.

Ja eksempler er der nok af :-)!


Halfdan Timm   for 1 decade siden.

Du er mit idol, mand. Intet mindre. Mit idol. Well done!


Nils   for 1 decade siden.

Der er var lidt om misbrug af CPR nummer på JP i går - http://jp.dk/indland/article2662336.ece


Casper Schneidereit   for 1 decade siden.

Tak for tippet Nils. De er i hvert fald opmærksomme på mit indlæg. Så må vi se om det ender ud i noget. Selv synes jeg det er en oplagt historie, men kritikken / problemet er jo i høj grad medierne selv, og så skriver pennen åbenbart ikke så stærkt :-). Så sent som i forgårs skrev jeg til Berlingske chefredaktør, omkring et billede der afslørede en persons cpr nummer. Jeg fik ingen response på mailen, men det er da blevet fjernet fra artiklen kan jeg se. De har dog ikke fjernet billedet fra nettet, som også er indekseret i Google Billedesøgning.

http://www.b.dk/nationalt/100.000-cpr-numre-maaske-sendt-i-aabne-breve


Jesper A.   for 1 decade siden.

Så er den gal med politiken igen. De har endda brugt det samme billede som du allerede har nævnt.

http://politiken.dk/tjek/ECE1506868/datalog-advarer-fremmede-kan-nemt-gaette-dit-cpr-nummer/


Casper Schneidereit   for 1 decade siden.

Nej, nej nej....


Rasmus   for 1 decade siden.

Det er simpelthen genialt udtænkt. Jeg ville ønske, at landets journalister vidste bare halvt så meget om internettet, som du gør - og orkede at interessere sig for det. Det ville virkeligt klæde aviserne at citere din artikel.


Casper Schneidereit   for 1 decade siden.

Jeg ringede til Politiken igen i morges, som sagde de ville fjerne billedet. Politiken tror åbenbart ikke det kan lade sig gøre at finde frem til Nils og hans CPR nummer. På 7 min lykkedes det, og der gik ikke mange minutter fra jeg havde ringet til Nils, til at billedet var væk fra nettet.


Casper Schneidereit   for 1 decade siden.

... de fjernede nemlig ikke billede da jeg kontaktede dem :-). Det skete først da den Nils ringede ind.


Jimi Hove   for 1 decade siden.

Så skete der da noget, da det kom i Version 2. Underligt at de større dagblade ikke finder det interessant..


Casper Schneidereit   for 1 decade siden.

Ja det har også undret mig. De har relativt tit tema med ID tyveri m.m. Men off the record har jeg fået at vide, at det kunne være "uetisk", da de var bange for det ville blive "misbrugt af kriminelle".


Jimi Hove   for 1 decade siden.

Well, så er der mange ting de burde stoppe med. Kriminelle udnytter alt, per definition. Det skal netop bringes, for at stoppe det.

Og hvad med alle de udsendelser hvor de viser tricks med pengeautomater ? osv osv osv.

Det irriterer dem kun, at de ikke selv fandt på historien. Typisk journalister


Nils   for 1 decade siden.

Hej Casper

Tak for opkaldet og hjælpen. Jeg har nu, uden de store problemer, fået fjernet billederne fra både hjemmeside og server (knock under wood).

Mvh. Nils


Allan Ellegaard   for 1 decade siden.

Super indlæg!
Jeg sidder selv og roder lidt med sygesikringsbeviset i anden sammen hæng og det er ikke stregkoden der er interessant for mig. Men dejligt lige at lærer noget mere :)
Og lidt meget skrammende, så lidt folk tænker over hvor og hvordan de flasher deres ID"er :(


Kristian Konradsen   for 1 decade siden.

Sørme om ikke den er gal igen...

http://ekstrabladet.dk/vrangen/article1723174.ece


Kristian Konradsen   for 1 decade siden.

De har du sløret stregkoden efter de blev gjort opmærksom på dit blogindlæg :O)



Peter Lauge   for 1 decade siden.

Jeg skulle lige til at skrive det samme. De har været hurtige må man sige.


Casper Schneidereit   for 1 decade siden.

Det var hurtig reaktion :-).

Det er i øvrigt stadigvæk interessant, at journalister synes det er en god historie når kommunen/private virksomheder laver fejl, der afføder blottede CPR numre. Men når det er aviser/medierne selv laver selvsamme fejl, så er det ikke værd at skrive om.


Casper Schneidereit   for 1 decade siden.

Desværre Nils, dit billede er online hos Politiken.dk :-).


Jens Jensen   for 1 decade siden.

Din lille stregkodegenerator sparede mig lige for en ekstra tur til døgnposten i supermarkedet.
Udover en tilsendt kode skal man scanne sit sundhedskort, som jeg ikke havde fået med. Googlede "sundhedskort stregkode" på min smartphone, fandt din side, genererede min stregkode og scannede den fra skærmen og vupti, gik lågen til boksen op :-) Takker


Lone Brand   for 7 år siden.

Ikke så underligt der ofte opstår ID tyveri når dette er så forholdvis tilgængeligt.


Bryllupsfotografen   for 7 år siden.

Det er sku sørgeligt de ikke kan opfinde noget der fungerer bedre end det


Dan   for 7 år siden.

Interessant artikel - prøvede lige, at lave samme program i VBA til Excel, og det er forbavsende let :-)

Men, jeg tror nu, at "risikoen" for at få spredt sit CPR-nummer er ganske lille - det er ikke CPR-nummeret i sig selv, der er farligt, at få spredt, men alle "følgeoplysningerne", som f.eks. adgangskoder, bankkonti og den slags...

Tænk bare på vores alle sammens folkesanger, Kim larsen, som allerede for snart 40 år siden udgav et album, hvor netop hans CPR-nummer var titlen på albummet.
Et andet eksempel på, at det er vildt overdrevent er, at der faktisk kun er 2 personer, der har fået udskiftet deres CPR-nummer i forbindelse med identitetstyveri - og, i begge tilfælde efter personernes egen anmodning, fordi de sikkert selv følte behov for det, og ikke fordi myndighederne fandt det nødvendigt.
Mit eget CPR-nummer har såment flydt rundt på Internettet siden 2001, i forbindelse med, at en uddannelsesinstitution "offentliggjorde" en afhandling, jeg havde lavet - uden, at jeg, hverken, har oplevet problemer på den bekostning, eller ligger søvnløs over det :-)

Det er ikke så meget selve CPR-nummeret, der er problemet, men folks egen sløseri og mangel på sikkerhed i forbindelse med CPR-nummeret, der er problemet - men, det er jo meget lettere, at give det offentlige skylden.

Men, når det nuværende system udløber i 2057, så kommer der nok noget helt andet - og, mit gæt er noget "biometrisk", som ansigtstræk, øjeiris, fingeraftryk eller måske endda en DNA-ID...


Mythdk   for 6 år siden.

Det er da fuldstændig inkompetent de ikke har mere styr på det i dette herrens år da

God blog ellers!

Mvh
Lone


Dødsbo Rydderen.   for 4 år siden.

Det er sku underligt de ikke kan opfinde noget der fungerer bedre end det, men ja igen. der er meget som er besynderligt


Hvad synes du?

Dit navn *
Din e-mail
Evt website
Hvad drikker møller?