Avatar billede fanatic Nybegynder
16. maj 2008 - 16:05 Der er 11 kommentarer og
1 løsning

Random CPR

Hej eksperter!

Er der en der vil vise mig et kodeeksempel som genererer et tilfældigt CPR-nummer?

Man kan jo bruge Random-klassen og noget i stil med dette:
int randomInt = randomGenerator.nextInt(10000);

Men i et CPR-nummer er jeg jo kun interesseret i at få lavet tal imellem et vist interval eks. 121288-1234. Dvs. evt. tallet 121288 og tallet 1234. nextInt giver mig fra 0 til X hvilket jeg jo ikke kan bruge.

Nogle forslag?
Avatar billede arne_v Ekspert
16. maj 2008 - 16:11 #1
Traek 4 tilfaeldige tal: 1-28, 1-12, 0-99 og 0-9999.
Avatar billede lborupj Nybegynder
16. maj 2008 - 19:56 #2
Hvis vi nu skal gå helt amok kan gøre noget ala følgende:

Random random = new Random();
Calendar cal = Calendar.getInstance();  // cal == current date and time
cal.add(Calendar.YEAR, (-1 * (random.nextInt(89) + 1)) );  // subtract years
cal.set(Calendar.DAY_OF_YEAR, (random.nextInt(365) + 1) ); // set rnd day of year
int lbnr = random.nextInt(9999);

så skal du bare lave cal om til en streng i formatet ddMMyy og lbnr til en streng på 4 cifre og concat de to..

meen ellers bare gøre som Arne Valhøj skriver ;-)
Avatar billede thesheriff Nybegynder
16. maj 2008 - 20:12 #3
Nu er jeg ikke den store kode-haj, men umiddelbart ser det ikke ud som om nogen af jer tager højde for modulus 11?
Avatar billede arne_v Ekspert
16. maj 2008 - 20:24 #4
I oktober begyndte man at uddele CPR numre som ikke matcher modulus 11 reglen.

Saa der er ikk emeget grund til at checke det.
Avatar billede thesheriff Nybegynder
16. maj 2008 - 20:32 #5
Det vidste jeg slet ikke.

Tak for det Arne :)
Avatar billede arne_v Ekspert
16. maj 2008 - 20:47 #6
Avatar billede arne_v Ekspert
16. maj 2008 - 20:57 #7
Det mest irriterende er at det er aldeles unoedvendigt - der er masser af CPR
numre - ca. 30 x 12 x 100 x 1000 er ca. 36 millioner - men ved en administrativ
mega boef har man valgt at tildele 0101yy-nnnn numre til dem man ikke har en foedselsdato
paa.
Avatar billede arne_v Ekspert
01. juni 2008 - 05:49 #8
Hvis man vil have alle dage med så vil jeg foreslå:

Date d = new Date(System.currentTimeMillis() - rng.nextLong(100L*365L*24L*60L*60L*1000L));
Avatar billede fanatic Nybegynder
11. juni 2008 - 18:49 #9
tak for hjælpen.

Sender en af jer et svar så vi kan få den lukket.
Avatar billede arne_v Ekspert
11. juni 2008 - 19:54 #10
svar

vi kan jo ogsaa dele
Avatar billede fanatic Nybegynder
11. juni 2008 - 22:26 #11
ja, lad os se om der kommer flere svar ;-)
Avatar billede thesheriff Nybegynder
12. juni 2008 - 04:42 #12
Håber ikke I venter på mig, for mit indlæg var blot ment som opklarende spørgsmål :)
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
Kurser inden for grundlæggende programmering

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