I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
function testcprnummerok(cprnummer : string) : byte; var cpr : string; nr : array(.1..10.) of byte; x : byte; verdi : word; tal : byte; code : integer; begin testcprnummerok:=1; cpr:=cleancprnummer(cprnummer);
if length(cpr)<>10 then exit;
for x:=1 to 10 do begin val(cpr(.x.),tal,code); nr(.x.):=tal; end; verdi:=4*nr(.1.)+3*nr(.2.)+2*nr(.3.)+7*nr(.4.)+6*nr(.5.)+5*nr(.6.)+ 4*nr(.7.)+3*nr(.8.)+2*nr(.9.)+nr(.10.);
if verdi mod 11<>0 then testcprnummerok:=2 else testcprnummerok:=3; end;
Kontrolcifferberegning ved brug af modulus 11 CPR-kontoret Dato: 14/06/2006 Beregning af kontrolciffer
Ni første tal 0 7 0 7 6 1 4 2 8
gange med x x x x x x x x x
hver deres værdi 4 3 2 7 6 5 4 3 2
giver 00+ 21+ 00+ 49+ 36+ 05+ 16+ 06+ 16
sammenlagt giver disse tal 149
149 delt med 11 giver 13 med en rest på 6
Kontrolcifret beregnes ved at trække resten 6 fra 11.
Kontrolcifret bliver i dette tilfælde 5 og det 10-cifrede nummer bliver 07 07 61-4285.
Hvis resten bliver 1 skulle kontrolcifret efter metoden være 10. Da 2-cifrede kontroltal ikke accepteres, kan kontrolcifrene i sådanne tilfælde ikke benyttes.
Kontrolberegning af et nummer med kontrolciffer
De 10 tal 0 7 0 7 6 1 4 2 8 5 ganget med x x x x x x x x x x hver deres værdi 4 3 2 7 6 5 4 3 2 1 giver 00+ 21+ 00+ 49+ 36+ 05+ 16+ 06+ 16+ 05
sammenlagt giver disse tal 154
154 delt med 11 giver 14 og ingen rest.
Når 11 går op i 154 og der derved ingen rest findes, er kontrolberegningen i orden. Ellers er kombinationen af de 10 cifre i nummeret forkert.
ok, jeg var lidt for hurtig så her er en der returnere en boolean:
function CprNummerOK(CprNr : string) : boolean; var nr : array(.1..10.) of byte; x : byte; verdi : word; tal : byte; code : integer; begin Result:=false;
for x:=Length(CprNr) downto 1 do if not (upcase(CprNr(.x.)) in (.'0'..'9','A'..'Z'.)) then delete(CprNr,x,1);
if Length(CprNr)<>10 then exit;
for x:=1 to 10 do begin val(CprNr(.x.),tal,code); nr(.x.):=tal; end; verdi:=4*nr(.1.)+3*nr(.2.)+2*nr(.3.)+7*nr(.4.)+6*nr(.5.)+5*nr(.6.)+ 4*nr(.7.)+3*nr(.8.)+2*nr(.9.)+nr(.10.);
if verdi mod 11<>0 then exit;
Result:=true; end;
----------------------------
if not CprNummerOK('120570-1235') then showmessage('nej, ikke gyldig'); end;
Mht. om man benytter Result= eller CprNummerOK= så er der ingen forskel, den første function jeg postede var en gammel en fra dengang (for mange år siden i Borland pascal) hvor der ikke var noget der hed Result.
Glem den første funktion og brug den anden. Virker det ikke på din computer hvis du benytter (. i stedet for [ ? I min Delphi 7 kan jeg benytte begge dele.
Jeg fandt functionen CalculateAge på Torry. Husk at tilføje DateUtils til din uses.
------------------------
function CalculateAge(Birthday, CurrentDate: TDate): Integer; var Month, Day, Year, CurrentYear, CurrentMonth, CurrentDay: Word; begin DecodeDate(Birthday, Year, Month, Day); DecodeDate(CurrentDate, CurrentYear, CurrentMonth, CurrentDay);
if (Year = CurrentYear) and (Month = CurrentMonth) and (Day = CurrentDay) then begin Result := 0; end else begin Result := CurrentYear - Year; if (Month > CurrentMonth) then Dec(Result) else begin if Month = CurrentMonth then if (Day > CurrentDay) then Dec(Result); end; end; end;
function CprNummerOK(CprNr : string; var Alder : integer) : boolean; var nr : array[1..10] of byte; x : byte; verdi : word; Dato : TDate; begin Result:=false;
for x:=Length(CprNr) downto 1 do if not (upcase(CprNr[x]) in ['0'..'9','A'..'Z']) then delete(CprNr,x,1);
if Length(CprNr)<>10 then exit;
for x:=1 to 10 do Nr[x]:=StrToIntDef(CprNr[x],-1);
// TwoDigitYearCenturyWindow:=50; Dato:=StrToDate(Copy(CprNr,1,2)+DateSeparator+Copy(CprNr,3,2)+DateSeparator+Copy(CprNr,5,2)); if Dato>Date then Dato:=IncYear(Dato,-100); Alder:=CalculateAge(Dato,Date); end;
var Alder : integer; begin if not CprNummerOK(Edit1.Text,Alder) then Showmessage('Nej, ugyldig cpr nummer') else Showmessage('OK. Alder er: '+IntToStr(Alder)); end;
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.