Newsgroup: it.comp.lang.vo-clipper
Titolo: Cod-fisc e conversione cifre-lettere

Due problemi non difficilissimi e che qualcuno ha sicuramente risolto in VO:
- ho la necessità di effettuare un controllo sul codice fiscale
- devo convertire un numero in lettere
Grazie a tutti
Claudio

"Dott. Claudio Carletta" wrote:

Le allego una funzioncina realizzata in Clipper, quindi può funzionare anche in
V.O., che utilizziamo da anni. ORa sarà necessario modificarla per l'Euro.
--
Cordiali Saluti
Mario Vacondio
FUNCTION Ciflet(R_Importo)                        && Trasforma numeri in lettere
PRIVATE R_Risulta, X_Importo, T_1a20, T_Deci, R_Tre, N_Tre
   DECLARE T_1a20[20],T_Deci[9]
   T_1a20[ 1] = "uno"
   T_1a20[ 2] = "due"
   T_1a20[ 3] = "tre"
   T_1a20[ 4] = "quattro"
   T_1a20[ 5] = "cinque"
   T_1a20[ 6] = "sei"
   T_1a20[ 7] = "sette"
   T_1a20[ 8] = "otto"
   T_1a20[ 9] = "nove"
   T_1a20[10] = "dieci"
   T_1a20[11] = "undici"
   T_1a20[12] = "dodici"
   T_1a20[13] = "tredici"
   T_1a20[14] = "quattordici"
   T_1a20[15] = "quindici"
   T_1a20[16] = "sedici"
   T_1a20[17] = "diciassette"
   T_1a20[18] = "diciotto"
   T_1a20[19] = "diciannove"
   T_1a20[20] = "venti"
   T_Deci[ 1] = "dieci"
   T_Deci[ 2] = "venti"
   T_Deci[ 3] = "trenta"
   T_Deci[ 4] = "quaranta"
   T_Deci[ 5] = "cinquanta"
   T_Deci[ 6] = "sessanta"
   T_Deci[ 7] = "settanta"
   T_Deci[ 8] = "ottanta"
   T_Deci[ 9] = "novanta"
   X_Importo  = STR(R_Importo,12)
   R_Risulta  = ""
   R_Tre = SUBSTR(X_Importo, 1,3)                  && Miliardi
   N_Tre = VAL(R_Tre)
   DO CASE
      CASE N_Tre = 1
         R_Risulta = "unmiliardo"
      CASE N_Tre > 1
         R_Risulta = Ciflet1(R_Tre) + "miliardi"
   ENDCASE
   R_Tre = SUBSTR(X_Importo, 4,3)                  && Milioni
   N_Tre = VAL(R_Tre)
   DO CASE
      CASE N_Tre = 1
         R_Risulta = R_Risulta + "unmilione"
      CASE N_Tre > 1
         R_Risulta = R_Risulta + Ciflet1(R_Tre) + "milioni"
   ENDCASE
   R_Tre = SUBSTR(X_Importo, 7,3)                  && Migliaia
   N_Tre = VAL(R_Tre)
   DO CASE
      CASE N_Tre = 1
         R_Risulta = R_Risulta + "mille"
      CASE N_Tre > 1
         R_Risulta = R_Risulta + Ciflet1(R_Tre) + "mila"
   ENDCASE
   R_Tre = SUBSTR(X_Importo,10,3)                  && Unit…
   IF VAL(R_Tre) # 0
      R_Risulta = R_Risulta + " " + R_Tre
   ENDIF
   R_Risulta = "#"+UPPER(LEFT(R_Risulta,1)) + SUBSTR(R_Risulta,2)+"#"
RETURN R_Risulta
FUNCTION Ciflet1                                  && Trasforma numeri in lettere
PARAMETER R_Tris
PRIVATE R_Risult1, N_Cent, N_Deci, N_Unit, N_DeUn, l
   R_Risult1 = ''
   IF VAL(R_Tris) = 0
      RETURN R_Risult1
   ENDIF
   N_Cent = VAL(LEFT  (R_tris,1))
   N_Deci = VAL(SUBSTR(R_tris,2,1))
   N_Unit = VAL(RIGHT (R_tris,1))
   N_DeUn = VAL(SUBSTR(R_tris,2,2))
   DO CASE
      CASE N_DeUn > 0 .AND. N_DeUn <= 20
         R_Risult1 = T_1a20[N_DeUn]
      CASE N_DeUn > 20
         R_Risult1 = T_Deci[N_Deci]
         IF N_Unit = 1 .OR. N_Unit = 8
            l         = LEN(R_Risult1)
            R_Risult1 = SUBSTR(R_Risult1,1,l-1)
         ENDIF
         IF N_Unit > 0
            R_Risult1 = R_Risult1 + T_1a20[N_Unit]
         ENDIF
   ENDCASE
   DO CASE
      CASE N_Cent = 1
         R_Risult1 = "cento" + R_Risult1
      CASE N_Cent > 1
         R_Risult1 = "cento" + R_Risult1
         R_Risult1 = T_1a20[N_Cent] + R_Risult1
   ENDCASE
RETURN R_Risult1