NÃ¥r man skal lære et nyt scripting-sprog er et af de første problemer altid – hvad skal man dog lave. Tilfældigvis havde jeg læst lidt om at fremstille et fiktivt CPR-nummer et par dage forinden, sÃ¥ hvorfor ikke bare prøve at skrive et python program der kunne det.
Resultatet kan ses herunder. Det skal dog lige bemærkes, at det sikkert kunne laves meget bedre og i scriptet er der en del begrænsninger, men det virker da nogenlunde. Det var i hvert fald nok til at jeg fik lyst til at kode lidt PHP igen :)
!/usr/bin/python
-- coding: utf-8 --
#
Fremstilling af CPR-nummer
AUTHOR:
Jesper Laursen
#
TODO:
Angivelse af køn
Automatisk fremstilling af nyt cpr hvis random-tal er forkerte
#
NOTE:
Virker kun ved fødselsdage mellem 1900 og 1999
Dette er mit første script i python (efter HelloWorld.py)
#
SEE ALSO:
Fik inspiration fra: http://www.oes.dk/sw2823.asp
# import sys from random import randint from random import choice
if len(sys.argv) != 2: print '' print 'Usage: '+ sys.argv[0] + ' ddmmyy' print '' sys.exit();
date = sys.argv[1]
day = date[0:2] month = date[2:4] year = date[4:6]
Første til forhøjes med 6
cpr = [int(date[0])+6]
resterende tal overføres
for x in date[1:]: cpr.append(int(x))
et 7. tal vælges
if int(year) < 37: cpr.append(randint(0, 3)) else: cpr.append(choice([0, 1, 2, 3, 4, 9]))
ciffer 8. og 9. er tilfældige
cpr.append(randint(0,9)) cpr.append(randint(0,9))
De forskellige tal har vægte
power = [4, 3, 2, 7, 6, 5, 4, 3, 2]
De forskellige tal ganges med deres vægt
cprtmp = [] for i in range(len(cpr)): cprtmp.append(power[i] * cpr[i])
10. cifre er summen af resten
cprtmp.append(sum(cprtmp))
Modulus 11 test
tmp = 11 - (cprtmp[9] % 11); if tmp == 11: cpr.append(0) elif tmp == 10: sys.stderr.write('Fejl - ugyldige randomtal - prøv igen') sys.exit() else: cpr.append(tmp)
1. cifre bliver ændret tilbage
cpr[0] = int(day[0])
Listen med cifre udskrives
for x in cpr: print x, Det var sÃ¥ mit første script – kom endelig med nogle kommentar. Jeg regner dog ikke med at skulle bruge dette script-sprog til noget nyttigt, men det var da meget sjovt bare at prøve det.
