mostra soluzione
001
<?php
002
/*
003
CLAUDIO CARDINALE 4AI
004
dato un file con i campi cognome, nome, data di nascita, sesso, comune di nascita
005
calcolare codice fiscale
006
*/
007
008
//acquisizione dati
009
$f
= @
fopen
(dirname(
__FILE__
).
"/dati"
,
"r"
)
or
die
(
"errore nell'apertura del file\n"
);
010
list(
$cognome
$nome
$data
$sesso
$comune
) =
explode
"-"
fgets
));
011
=
str_replace
"\n"
""
012
fclose(
013
014
$cod
;
015
.= calcola_cognome(
016
.= calcola_nome(
017
.= calcola_data_e_sesso(
018
.= calcola_comune(
019
.= calcola_controllo(
020
021
print
"codice fiscale : "
.
022
023
//calcolo del cognome
024
function
calcola_cognome(
){
025
strtoupper
026
" "
027
$vocali
array
();
028
$str
029
030
for
$i
=0;
<
strlen
) &&
)<3;
++)
031
if
(vocale(
[
]))
032
[] =
];
033
else
034
.=
035
036
)<3)
037
= 0;
count
038
039
040
041
while
042
"X"
043
044
return
045
}
046
047
//calcolo del nome
048
calcola_nome(
049
050
051
$consonanti
052
053
054
055
056
057
058
059
060
)>=4)
061
[0].
[2].
[3];
062
063
<3 &&
064
065
066
067
068
069
070
071
072
073
074
075
076
077
//calcolo della data di nascita e del sesso
078
calcola_data_e_sesso (
079
"/"
080
081
082
083
//anno
084
[2][2].
[2][3];
085
086
//mese
087
.= mese(
[1]);
088
089
//giorno e sesso
090
==
"F"
091
.= (
[0]+40);
092
093
[0];
094
095
096
097
098
//calcolo del codice del comune
099
calcola_comune(
100
101
"/comuni"
"errore nell'apertura del file comuni\n"
);;
102
103
104
$flag
105
(!
&& (
))!=
106
";"
107
(trim(
[0]) ==
"\""
.trim(
108
= 1;
109
110
111
112
113
114
substr
[2]), 1, -1);
115
116
"ERRR"
117
118
119
//calcolo del carattere di controllo
120
calcola_controllo(
121
//inizializzazioni
122
$caratteri_p
123
$caratteri_d
124
$somma_p
125
$somma_d
126
$valori_p
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);
127
$valori_d
(1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 1, 0, 5, 7, 9, 13, 15, 17, 19, 21, 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23);
128
129
//divisione caratteri pari/dispari
130
<15;
131
%2)
132
133
134
135
136
//conversioni
137
138
+= converti(
],
139
140
141
142
$somma
+
143
144
//ritorno
145
chr
(65+
%26);
146
147
148
//controllo se è una vocale
149
vocale(
$lettera
150
151
"A"
||
"E"
"I"
"O"
"U"
152
true;
153
false;
154
155
156
//ritorno il valore letterale del mese
157
mese(
$mese
158
$lettere
"B"
"C"
"D"
"H"
"L"
"M"
"P"
"R"
"S"
"T"
159
-1];
160
161
162
//conversione dei caratteri in base a dei valori passati come parametro
163
converti(
$val
$valori
164
$val_v
165
166
ord(
167
is_numeric
))
168
= 10+ord(
)-65;
169
170
171
172
?>
torna