Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Codice Fiscale 2.0 - CODFISCIMP.pas

CODFISCIMP.pas

Caricato da: K.Mitnick
Scarica il programma completo

  1. //si riutilizza il programma in pascal di Oligoatria (corretto da K.Mitnick)
  2. unit CodFiscImp;
  3.  
  4. interface
  5.  
  6.  
  7.  
  8. var
  9.    com,sesso: char;
  10.    comu,nome,cognome,anno,s,codice,tmp: string[80];
  11.    ss2: string[2];
  12.    jj,l,s1,s2,res,i,let,g,n,gio: integer;
  13.    corretto,maschio,riconosciuto: boolean;
  14.    xp:string;
  15.    {co: array[1..10,1..10] of string;}
  16.  
  17. Procedure Main_control();
  18. Procedure somma_s2;
  19. function booleana(s: char): integer;
  20. function _cons(stringa: string;jj: integer): string;
  21. Procedure copia_nome;
  22. Procedure dati_centrali;
  23.  
  24.  
  25. Implementation
  26.  
  27. function booleana(s: char): integer;   { 1 = cons  2 = voc  3 = altro }
  28.  
  29.  begin
  30.   booleana:=3;
  31.   case s of
  32.    'A','E','I','O','U','a','e','i','o','u': booleana:=2;
  33.    else
  34.     if (s>='A') and (s<='Z') or (s>='a') and (s<='z') then
  35.      booleana:=1;
  36.   end;
  37.  end;
  38.  
  39.  
  40. function _cons(stringa: string;jj: integer): string;
  41.  var                        { se jj=1 allora 1,3,4 consonante (nome) }
  42.    i,l,ls: integer;
  43.    st2: string[10];
  44.  
  45.  begin
  46.   st2:='';
  47.   l:=length(stringa);
  48.   ls:=1;
  49.   i:=1;
  50.   while (ls<=3+jj) and (i<=l) do
  51.    begin
  52.     if booleana(stringa[i])=1 then
  53.      begin
  54.       st2:=st2+copy(stringa,i,1);
  55.       ls:=ls+1;
  56.      end;
  57.     i:=i+1;
  58.    end;
  59.   i:=1;
  60.   if ls<>4+jj then
  61.    begin
  62.     while (ls<=3+jj) do
  63.      begin
  64.       if booleana(stringa[i])=2 then
  65.        begin
  66.         st2:=st2+copy(stringa,i,1);
  67.         ls:=ls+1;
  68.        end;
  69.       i:=i+1;
  70.      end;
  71.    end;
  72.  _cons:=st2;
  73. end;
  74.  
  75. Procedure copia_nome;
  76.  begin
  77.   tmp:=_cons(nome,1);
  78.   insert(tmp[1],codice,4);          { ritornano 4 caratteri }
  79.   if (booleana(tmp[4])=2) then      { se cons<=3 --> 1ø 2ø 3ø }
  80.    begin
  81.     insert(tmp[2],codice,5);
  82.     insert(tmp[3],codice,6);
  83.    end
  84.   else                              { se cons>3 --> 1ø 3ø 4ø }
  85.    begin
  86.     insert(tmp[3],codice,5);
  87.     insert(tmp[4],codice,6);
  88.    end;
  89.  end;
  90.  
  91.  
  92.  
  93. Procedure dati_centrali;
  94. begin
  95.  
  96.   ss2:=copy(anno,3,2);
  97.   insert(ss2,codice,7);
  98.  
  99.   case g of
  100.    1: s:='A';
  101.    2: s:='B';
  102.    3: s:='C';
  103.    4: s:='D';
  104.    5: s:='E';
  105.    6: s:='H';
  106.    7: s:='L';
  107.    8: s:='M';
  108.    9: s:='P';
  109.    10: s:='R';
  110.    11: s:='S';
  111.    12: s:='T';
  112.   end;
  113.   insert(s,codice,9);
  114.  
  115.   if maschio=false then
  116.   begin
  117.        gio:=gio+40;
  118.        str(gio, s);
  119.        insert(s,codice,11);
  120.   end;
  121.       if ((maschio=true) and (gio>10)) then
  122.       begin
  123.            gio:=gio;
  124.            str(gio, s);
  125.            insert(s,codice,11);
  126.       end;
  127.           if ((maschio=true) and (gio<10)) then
  128.           begin
  129.                xp:='0';
  130.                gio:=gio;
  131.                str(gio, s);
  132.                insert(s,codice,11);
  133.                insert(xp,codice,10);
  134.           end;
  135. end;
  136.  
  137.  
  138.  
  139. Procedure somma_s2;
  140.  begin
  141.   case codice[i] of
  142.    'A','0': s2:=s2+1;
  143.    'B','1': s2:=s2+0;
  144.    'C','2': s2:=s2+5;
  145.    'D','3': s2:=s2+7;
  146.    'E','4': s2:=s2+9;
  147.    'F','5': s2:=s2+13;
  148.    'G','6': s2:=s2+15;
  149.    'H','7': s2:=s2+17;
  150.    'I','8': s2:=s2+19;
  151.    'J','9': s2:=s2+21;
  152.    'K': s2:=s2+2;
  153.    'L': s2:=s2+4;
  154.    'M': s2:=s2+18;
  155.    'N': s2:=s2+20;
  156.    'O': s2:=s2+11;
  157.    'P': s2:=s2+3;
  158.    'Q': s2:=s2+6;
  159.    'R': s2:=s2+8;
  160.    'S': s2:=s2+12;
  161.    'T': s2:=s2+14;
  162.    'U': s2:=s2+16;
  163.    'V': s2:=s2+10;
  164.    'W': s2:=s2+22;
  165.    'X': s2:=s2+25;
  166.    'Y': s2:=s2+24;
  167.    'Z': s2:=s2+23;
  168.   end;
  169.  end;
  170.  
  171. Procedure copiaX;
  172.  begin  
  173.   if (booleana(cognome[1])=2) and (booleana(cognome[2])=1) then
  174.    begin
  175.     insert(cognome[2],codice,jj);
  176.     insert(cognome[1],codice,jj+1);
  177.    end
  178.   else
  179.    insert(cognome,codice,jj);
  180.  
  181.   insert('X',codice,jj+2);  
  182.  end;
  183.  
  184.  
  185. Procedure Main_control();
  186.  begin  
  187.   codice:='';                             { cognome e nome }
  188.  
  189.   let:=length(cognome);
  190.   if let>2 then
  191.    insert((_cons(cognome,0)),codice,1);    { ritornano i 3 caratteri }
  192.   jj:=1;
  193.   if let=2 then copiaX;
  194.    
  195.   let:=length(nome);
  196.   if let>2 then copia_nome;
  197.   jj:=4;
  198.   if let=2 then copiaX;
  199.  
  200.   dati_centrali;                          { dati centrali }
  201.  
  202.   l:=1;
  203.   while not( (comu[l]>='0') and (comu[l]<='9') ) do    { posizione del codice }
  204.    l:=l+1;
  205.   l:=l-2;
  206.   delete(comu,1,l);
  207.   delete(comu,5,1);
  208.   insert(comu,codice,14);
  209.  
  210.   for i:=1 to 15 do                      { carattere di controllo }
  211.    codice[i]:=upcase(codice[i]);
  212.   s1:=0;
  213.   s2:=0;
  214.   i:=2;
  215.   while (i<=14) do
  216.    begin
  217.     if (codice[i]>='0') and (codice[i]<='9') then
  218.      s1:=s1+( ord(codice[i])-ord('0') )
  219.     else     { tra 65 e 90 }
  220.      s1:=s1+( ord(codice[i])-ord('A') );
  221.     i:=i+2;
  222.    end;
  223.    i:=1;
  224.   while (i<=15) do
  225.    begin
  226.     somma_s2;
  227.     i:=i+2;
  228.    end;
  229.   s1:=s1+s2;
  230.   res:=s1 mod 26;
  231.   s:=chr(res+65);
  232.   insert(s, codice, 16);
  233.  
  234.  end;
  235.  
  236. end.