Avatar billede maxium Novice
15. november 2001 - 14:30 Der er 19 kommentarer og
1 løsning

cpr nummer cheker

er der en der kan få det til at virke:


function TForm1.IsCprValid(Cpr: integer): boolean;
var
  I, TotalCount: integer;
  CurrentNum, StartCPR: string;
  Vaerdi : array[1..10] of integer;
begin
if length(inttostr(Cpr)) <> 10 then result := false else
  begin
  StartCPR := inttostr(Cpr);
  Delete(StartCPR, Length(StartCPR), Length(StartCPR));//fjerner sidste værdi
    for I := 1 to 10 do
    begin
      CurrentNum := inttostr(Cpr)[I];
      case I of
        1: Vaerdi[1] := (Round(strtoint(CurrentNum) * 6));
        2: Vaerdi[2] := (Round(strtoint(CurrentNum) * 5));
        3: Vaerdi[3] := (Round(strtoint(CurrentNum) * 4));
        4: Vaerdi[4] := (Round(strtoint(CurrentNum) * 3));
        5: Vaerdi[5] := (Round(strtoint(CurrentNum) * 2));
        6: Vaerdi[6] := (Round(strtoint(CurrentNum) * 6));
        7: Vaerdi[7] := (Round(strtoint(CurrentNum) * 5));
        8: Vaerdi[8] := (Round(strtoint(CurrentNum) * 4));
        9: Vaerdi[9] := (Round(strtoint(CurrentNum) * 3));
        10: Vaerdi[10] := (Round(strtoint(CurrentNum)*2));
      end;
    end;
    TotalCount := (Vaerdi[1]+Vaerdi[2]+Vaerdi[3]+Vaerdi[4]+Vaerdi[5]+Vaerdi[6]+Vaerdi[7]+Vaerdi[8]+Vaerdi[9]+Vaerdi[10]) div 11;
    if TotalCount = 10 then result := true else result := false;
  end;
end;


procedure TForm1.FormClick(Sender: TObject);
begin//Eksempel Cpr:
if IsCprValid(1008860159) then showmessage(\'Ok\') else  showmessage(\'Ikke valid\');
end;

og så sende mig sours (saves i delphi)
Avatar billede maxium Novice
15. november 2001 - 14:31 #1
voodoofx@ofir.dk
Avatar billede martinlind Nybegynder
15. november 2001 - 14:37 #2
Prøv denne :

function CheckCpr( aCpr : String ) : Boolean;
const
  CtrlTal : array[1..10] of Integer = (4,3,2,7,6,5,4,3,2,1);
var
  Cnt, Err,
  V, ChkSum : Integer;
begin
  if Length(aCpr) = 10 then
  begin
      Err := 0;
      ChkSum := 0;
      Cnt := 1;
      while ( Cnt < 11 ) and ( Err = 0 ) do
      begin
        Val(aCpr[Cnt],V,Err);
        ChkSum := ChkSum + ( V * CtrlTal[Cnt] );
        Inc(Cnt);
      end;
      Result := ( Err = 0) and ( Frac(ChkSum / 11) = 0);
  end else Result := FALSE;
end;


Den Virker

/Martin
Avatar billede maxium Novice
15. november 2001 - 14:43 #3
hmmm skal nok foreklare det lidt bædre alså når at man gemmer sit projekt i delphi så er der jo nogle filer som bedes sende til min e-mail
Avatar billede martinlind Nybegynder
15. november 2001 - 14:47 #4
Brug min funktion den virker
Avatar billede maxium Novice
15. november 2001 - 15:02 #5
EEEEEEhhhhhhhhhhhhhhhhhhh
Avatar billede martinlind Nybegynder
15. november 2001 - 15:05 #6
?????
Avatar billede hreiff Nybegynder
15. november 2001 - 15:08 #7
se spørgsmål: 132407 under besvarede emner: cpr check.

1: Beregningen er forkert (11 - x MOD 11).
2: Du kan ikke overføre tallet som en integer (max 32000)

Forslag sendt til woodoofx
Avatar billede hreiff Nybegynder
15. november 2001 - 15:10 #8
PS: Der mangler et datocheck (f.eks fanges 32-2-97-1234 ikke)
Avatar billede martinlind Nybegynder
15. november 2001 - 15:11 #9
hreff >> Integer er :

Integer    &#8211;2147483648..2147483647    signed 32-bit

i en 32 bit pascal, det andet var i gamle dage *S*
Avatar billede maxium Novice
15. november 2001 - 15:12 #10
1: gem dit projekt
2: send de gemte filer til min e-mail
3: hvis det virker får du dine point
Avatar billede maxium Novice
15. november 2001 - 15:14 #11
hreiff> woodofx ??? min mail er voodoofx@ofir.dk (v ikke w)
Avatar billede maxium Novice
15. november 2001 - 15:17 #12
hreiff> kan du lave programmet rigtigt og så sende mig projektet
Avatar billede hreiff Nybegynder
15. november 2001 - 15:26 #13
-> martinlind:
Ok - Det er bar mig som bruger en oldgammel version af Delphi (1)

-> maxium:
Jeg har sendt et forslag (til voodoofx@ofir.dk), men vores email-system er lidt langsomt. Håber at det dukker op
Avatar billede hreiff Nybegynder
15. november 2001 - 15:29 #14
-> martinlind:
PS - din 32 bit signed er iøvrigt heller ikke nok,
f.eks. d. 301075-1234 ?
Avatar billede maxium Novice
15. november 2001 - 15:49 #15
hreiff> hvis at jeg intaster mit cpr nr fx ******-**** så står der cpr nummer forkert længde
Avatar billede maxium Novice
15. november 2001 - 15:52 #16
1: har fundet fejlen inden de 4 sidste tal må man ikke skrive -
2: hvordan laver jeg denne fejl så brugeren kan intaste sit cpr som man skal nu 1111111111 og 111111-1111
Avatar billede maxium Novice
15. november 2001 - 16:03 #17
en mere fejl hvis at man intaster 0000000000 er cpr nr godkendt
Avatar billede hreiff Nybegynder
15. november 2001 - 16:13 #18
0000000000 bliver fanget af datokontrollen hvis du laver sådan en (ugyldig dato).
-\'en kan du klare med:

Først i Button1.click:

var cprnr: string;

cprnr := edit1.text;
if cprnr[7] = \'-\' then
  delete(cprnr,7,1); {fjerner bindestregen}

og så fortsætter med cprnr istedet for edit1.text

//hreiff
Avatar billede hreiff Nybegynder
15. november 2001 - 16:25 #19
En datokontrol laver du som følger:

function ChkDato(cprnr:cprtype):boolean;
var
  dg,md,ar : integer;
begin
  dg := StrToInt(copy(cprnr,1,2)); {første 2 tal}
  md := StrToInt(copy(cprnr,3,2)); {næste 2 tal }
  ar := StrToInt(copy(cprnr,5,2));

  Result := true;
  if ((dg=0) or (dg > 31)) then Result := false;
  if ((md=0) or (md > 12)) then Result := false;
  case md of
    4,6,9,11: if dag > 30 then Result := false;
    2: if dag > 29 then Result := false;
  end;
end;

Indsættes efter check af cifre.
så mangler der bare en kontrol for skudår og 28/2

//hreiff
Avatar billede maxium Novice
17. november 2001 - 11:46 #20
luket (vil ikke virke ornlig)
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