CPR nr. hjælp
Hvem kan hjælpe mig med denne opgave...CPR-nummeret
CPR-nummeret blev indført i Danmark i 1968. Danmark er i øvrigt (i lighed med Norge og Sverige) et af de få lande, hvor man har sat numre på borgerne. I de fleste andre lande betragtes nummereringen som et indgreb i den personlige integritet.
Anatomien af et CPR-nummer
Et CPR-nummer består af 3 elementer: fødselsdatoen, et løbenummer og et kontrolciffer.
· Fødseldato: De første 6 cifre angiver fødselsdatoen på formen ddmmåå.
· Løbenummer: De næste 3 cifre er et løbenummer, der i princippet er fremkommet ved, at man har tildelt personer, der er født samme dag et entydigt nummer. Tidligere blev \"indfødte\" danskere tildelt små løbenumre, dvs. numre mindre end 150, medens adopterede og indvandrere fik løbenumre, der var større. Personer, der er født i det 20. århundrede har tillige løbenumre mindre end 500, medens personer født i det 19. og 21. århundrede har løbenumre større end 500.
· Kontrolciffer: Det 10. og sidste ciffer er et kontrolciffer, som er fremkommet ud fra en beregning, hvori de 9 første cifre indgår, og kan derfor anvendes som en kontrol for CPR-nummerets ægthed. Cifret angiver tillige kønnet; Mænd har et ulige kontrolciffer og kvinder et lige.
Gyldige CPR-numre
Til fabrikation af et tilfældigt og gyldigt CPR-nummer skal man vælge en passende dato og et trecifret løbenummer, der ikke bør være for stort. Kontrolcifret beregnes herefter vha. følgende formel:
1. ciffer ganges med 4
2. ciffer ganges med 3
3. ciffer ganges med 2
4. ciffer ganges med 7
5. ciffer ganges med 6
6. ciffer ganges med 5
7. ciffer ganges med 4
8. ciffer ganges med 3 og
9. ciffer ganges med 2
Resultaterne lægges sammen og restdivideres med 11. Den herved fremkomne rest trækkes fra 11, og resultatet er et kontrolciffer. Hvis dette kontrolciffer er 10, så kan løbenummeret ikke anvendes, og man må vælge et nyt. Det skal man naturligvis også, hvis kontrolcifferet ikke stemmer overens med kønnet – lige for kvinder og ulige for mænd.
Opgaven
Opgaven løses ved at besvare følgende tre spørgsmål. De første 2 med ord og det sidste med en udskrift af programkoden:
Hvordan realiseres en read-only attribut?
· Begrund hvorfor man anvender konstruktører!
· Du skal lave en klasse PersonNummer , der opfylder følgende:
Klassen skal opbevare et CPR-nummer, og skal implementeres således, at den kan testes vha. nedenstående testprogram, som udskriver gyldige CPR-numre ud fra en given dato:
class CprTester
{
public static void main(String[] args)
{
PersonNummer cpr = new PersonNummer(18, 2, 95);
for (int løbenr = 1; løbenr < 1000; løbenr++)
{
if (cpr.getCheckDigit(løbenr) != PersonNummer.NOT_VALID)
{
cpr.setSerialno(løbenr);
System.out.println(cpr);
}
}
}
}
Bemærk, at for at kunne udskrive et CPR-nummer vha. System.out.println(), så skal følgende metode implementeres på PersonNummer-klassen:
class PersonNummer
{
...
public String toString()
{
// Her omformes klassens attributter til en streng på formen \"ddmmåå-xxxk\"
}
}
Tips: Du kan fx anvende klasse-metoden String.valueOf(<heltal>) til at konvertere et heltal til en streng eller klasse-metoden Integer.parseInt(<streng>) til at konvertere den modsatte vej fra en streng til et heltal
Brug test-klassen CprTester til at identificere konstruktør, konstanter, metoder mv. Du må selv vælge, hvorledes PersonNummer-klassens attributter skal implementeres.