Avatar billede haolan Nybegynder
29. marts 2007 - 08:29 Der er 7 kommentarer og
1 løsning

Trække et ciffer ud fra et CPR

Hej eksperter..

Jeg har en int som indeholder et CPR nr, fx 1204601794 jeg vil så teste på om det sidste ciffer er et lige eller ulige tal, så jeg kan afgøre om personen er mand eller kvinde..

Hvordan gør jeg det??
Avatar billede flyver23 Nybegynder
29. marts 2007 - 08:37 #1
int cpr = 1204601794;
            int res = cpr % 10;
            if (res % 2 == 0)
            {
                Console.WriteLine("Lige tal");
            }
            else
            {
                Console.WriteLine("Ulige tal");
            }
            Console.WriteLine(res.ToString());

Vh flyver23
Avatar billede bitmatic Nybegynder
29. marts 2007 - 10:20 #2
eller:

bool IsWoman(int cpr)
{
  return ((cpr&1)==1);
}
Avatar billede md_craig Nybegynder
29. marts 2007 - 11:55 #3
bitmatic >>

Kunne være man skulle forklare ham lidt om hvorfor det egentlig er det virker ^^...
... ved ikke lige hvordan jeg lige skal udtrykke det i tekst selv. men...

haolan >>

Det er demonstrere lidt hvad der sker:
Det CPR du har angivet der svarer binært til:
1204601794  =  1000111110011001100001111000010

1 svarer til:
1 = 1

Man laver så en AND operation på de to tal:

CPR: 1000111110011001100001111000010 (1204601794)
ET_: 0000000000000000000000000000001 (1)

RES: 0000000000000000000000000000000 (0)

0 == 1 ? nej... det er en mand...

en kvinde:

CPR: 1000111110011001100001111000011 (1204601795)
ET_: 0000000000000000000000000000001 (1)

RES: 0000000000000000000000000000001 (1)

1 == 1 ? Ja... det er en kvinde...

Hvis du ikke viste det i forvejen...
Ellers håber jeg det gav lidt forståelse, for det er en lidt længere forklaring som sådan...
Avatar billede bitmatic Nybegynder
29. marts 2007 - 12:30 #4
md_craig >>

Helt korrekt. Det er formodentlig ikke alle "moderne" programmører der er vant til bitwise operators. Det er egentlig lidt ærgerligt, da de ofte er markant hurtigere.
Avatar billede arne_v Ekspert
29. marts 2007 - 15:02 #5
det er forhaabentligt en unsigned int eller en long ...
Avatar billede bitmatic Nybegynder
29. marts 2007 - 15:20 #6
Godt set Arne. Det er faktisk en int han bruger i sit kode-eksempel.

flyver23 >>

Husk på:
Max værdien for en unsigned int32 er 4294967295
Max værdien for en signed int32 er 2147483647
Max værdien for et cpr-nummer er 3112999999

Så cpr-numre på folk født efter den 21. i måneden kan ikke være i en int (hvis den er 32-bit), men kan til gengæld være i en unsigned int.
Avatar billede bitmatic Nybegynder
29. marts 2007 - 15:23 #7
og ovenstående er selvfølgelig til haolan, og ikke til flyver23 :)
Avatar billede haolan Nybegynder
29. marts 2007 - 22:35 #8
Takker for jeres svar og forklaringer :)
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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