|
DataMuseum.dkPresents historical artifacts from the history of: MIKADOS |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about MIKADOS Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 2528 (0x9e0) Types: TextFile Notes: Mikados TextFile, Mikados_K Names: »PERSONNU«
└─⟦4cd80c18f⟧ Bits:30003895/4xCOMAL3a.imd 4 * COMAL - SPC/1 - Disketter til bogen └─⟦this⟧ »PERSONNU« └─⟦bcf7b34c7⟧ Bits:30003895/4xCOMAL2.imd 4 * COMAL - SPC/1 - Disketter til bogen └─⟦this⟧ »PERSONNU«
0010 // ------------------ personnu ----------------------- 0020 // Programmet kontrollerer om et opgivet personnummer er korrekt 0030 // Datoens gyldighed kontrolleres også 0040 // 0041 INTEGER TRUE,FALSE 0042 TRUE:=1;FALSE:=0 0050 PROC CPR_CHECK(REF CHTAL$) 0060 SUM:=0;TEST:=TRUE 0070 FOR I:=1 TO 7 DO 0080 SUM:=SUM+ASC(CHTAL$(11-I))*I 0090 NEXT I 0100 FOR I:=2 TO 4 DO 0110 SUM:=SUM+ASC(CHTAL$(5-I))*I 0120 NEXT I 0130 IF SUM MOD 11<>0 THEN TEST:=FALSE 0140 DATO:=ASC(CHTAL$(1:2)) 0150 MÅNED:=ASC(CHTAL$(3:2)) 0160 ÅR:=ASC(CHTAL$(5:2)) 0170 IF DATO=0 OR DATO>31 OR MÅNED=0 OR MÅNED>12 THEN TEST:=FALSE 0180 RESTORE 0190 DATA 4,6,9,11 0200 FOR I:=1 TO 4 DO 0210 READ KORTMÅNED 0220 IF KORTMÅNED=MÅNED AND DATO=31 THEN TEST:=FALSE 0230 NEXT I 0240 IF MÅNED=2 AND DATO>29 THEN TEST:=FALSE 0250 IF MÅNED=2 AND DATO=29 AND (ÅR MOD 4<>0 OR ÅR=0) THEN TEST:=FALSE 0260 IF TEST=TRUE THEN CHTAL$:="OK" 0270 ENDPROC CPR_CHECK 0280 // 0290 CLEAR 0300 DIM TAL$ OF 20,KOPI$ OF 10 0310 PRINT 0320 PRINT " De 10 cifre i personnummeret skal nu indtastes uden "; 0321 PRINT "mellemrum" 0330 PRINT " F.eks kan indtastningen se således ud: 1212121212" 0340 PRINT " Programmet stopper, når der tastes 0" 0350 REPEAT 0360 REPEAT 0370 OMIGEN:=FALSE 0380 CURSOR 36,10 0390 PRINT " " 0400 CURSOR 11,10 0410 INPUT "Indtast et personnummer: ":TAL$ 0420 IF TAL$="0" THEN 0430 CURSOR 1,22 0440 STOP 0450 ENDIF 0460 IF LEN(TAL$)=10 THEN 0470 FOR I:=1 TO 10 DO 0480 IF ORD(TAL$(I:I))<48 OR ORD(TAL$(I:I))>57 THEN OMIGEN:=TRUE 0490 NEXT I 0500 ELSE 0510 OMIGEN:=TRUE 0520 ENDIF 0530 UNTIL NOT OMIGEN 0540 KOPI$:=TAL$ // Nu har vi netop 10 cifre 0550 EXEC CPR_CHECK(TAL$) 0560 CURSOR 11,15 0570 IF TAL$="OK" THEN 0580 PRINT "CPR-nummeret ";KOPI$;" er i orden" 0590 ELSE 0600 PRINT "CPR-nummeret ";KOPI$;" er forkert" 0610 ENDIF 0620 CURSOR 11,20 0630 INPUT "Tast <Return>":TAL$ 0640 UNTIL FALSE 2661 // mrum"
;0010 // ------------------ personnu -----------------------;E0020 // Programmet kontrollerer om et opgivet personnummer er korrektE+0030 // Datoens gyldighed kontrolleres også+▶08◀0040 // ▶08◀▶17◀0041 INTEGER TRUE,FALSE▶17◀▶15◀0042 TRUE:=1;FALSE:=0▶15◀▶1f◀0050 PROC CPR_CHECK(REF CHTAL$)▶1f◀▶16◀0060 SUM:=0;TEST:=TRUE▶16◀▶16◀0070 FOR I:=1 TO 7 DO ▶16◀!0080 SUM:=SUM+ASC(CHTAL$(11-I))*I!▶0b◀0090 NEXT I▶0b◀▶16◀0100 FOR I:=2 TO 4 DO ▶16◀ 0110 SUM:=SUM+ASC(CHTAL$(5-I))*I ▶0b◀0120 NEXT I▶0b◀&0130 IF SUM MOD 11<>0 THEN TEST:=FALSE&▶1b◀0140 DATO:=ASC(CHTAL$(1:2))▶1b◀▶1c◀0150 MÅNED:=ASC(CHTAL$(3:2))▶1c◀▶19◀0160 ÅR:=ASC(CHTAL$(5:2))▶19◀A0170 IF DATO=0 OR DATO>31 OR MÅNED=0 OR MÅNED>12 THEN TEST:=FALSEA\r0180 RESTORE \r▶12◀0190 DATA 4,6,9,11▶12◀▶16◀0200 FOR I:=1 TO 4 DO ▶16◀▶13◀0210 READ KORTMÅNED▶13◀40220 IF KORTMÅNED=MÅNED AND DATO=31 THEN TEST:=FALSE4▶0b◀0230 NEXT I▶0b◀,0240 IF MÅNED=2 AND DATO>29 THEN TEST:=FALSE,F0250 IF MÅNED=2 AND DATO=29 AND (ÅR MOD 4<>0 OR ÅR=0) THEN TEST:=FALSEF#0260 IF TEST=TRUE THEN CHTAL$:="OK"#▶16◀0270 ENDPROC CPR_CHECK▶16◀▶08◀0280 // ▶08◀▶0b◀0290 CLEAR ▶0b◀▶1f◀0300 DIM TAL$ OF 20,KOPI$ OF 10▶1f◀▶0b◀0310 PRINT ▶0b◀L0320 PRINT " De 10 cifre i personnummeret skal nu indtastes uden ";L▶16◀0321 PRINT "mellemrum"▶16◀H0330 PRINT " F.eks kan indtastningen se således ud: 1212121212"H;0340 PRINT " Programmet stopper, når der tastes 0";\f 0350 REPEAT \f \f 0360 REPEAT \f ▶12◀0370 OMIGEN:=FALSE▶12◀▶11◀0380 CURSOR 36,10▶11◀ 0390 PRINT " " ▶11◀0400 CURSOR 11,10▶11◀,0410 INPUT "Indtast et personnummer: ":TAL$,▶16◀0420 IF TAL$="0" THEN ▶16◀▶10◀0430 CURSOR 1,22▶10◀ 0440 STOP ▶0b◀0450 ENDIF ▶0b◀▶1a◀0460 IF LEN(TAL$)=10 THEN ▶1a◀▶17◀0470 FOR I:=1 TO 10 DO ▶17◀@0480 IF ORD(TAL$(I:I))<48 OR ORD(TAL$(I:I))>57 THEN OMIGEN:=TRUE@▶0b◀0490 NEXT I▶0b◀ 0500 ELSE ▶11◀0510 OMIGEN:=TRUE▶11◀▶0b◀0520 ENDIF ▶0b◀▶15◀0530 UNTIL NOT OMIGEN▶15◀,0540 KOPI$:=TAL$ // Nu har vi netop 10 cifre,▶19◀0550 EXEC CPR_CHECK(TAL$)▶19◀▶11◀0560 CURSOR 11,15▶11◀▶17◀0570 IF TAL$="OK" THEN ▶17◀.0580 PRINT "CPR-nummeret ";KOPI$;" er i orden". 0590 ELSE .0600 PRINT "CPR-nummeret ";KOPI$;" er forkert".▶0b◀0610 ENDIF ▶0b◀▶11◀0620 CURSOR 11,20▶11◀▶1f◀0630 INPUT "Tast <Return>":TAL$▶1f◀▶10◀0640 UNTIL FALSE▶10◀\r2661 // mrum"\r▶00◀▶00◀ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc