FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index All products support Codice fiscale/ partita IVA
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Codice fiscale/ partita IVA
Posted: Sat Apr 15, 2006 06:17 AM

Salve a tutti,
qualcuno di voi ha una routine di controllo/generazione codice fiscale e controllo partita iva ?

Grazie.

Marco

Best Regards,



Marco Turco

SOFTWARE XP LLP
Posts: 9020
Joined: Thu Oct 06, 2005 08:17 PM
Re: Codice fiscale/ partita IVA
Posted: Sat Apr 15, 2006 09:23 AM
Controllo Codice Fiscale:

FUNCTION ISCOD( cCod )

    LOCAL aCod := { 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 }
    LOCAL nChr, cChr, nPos, nCod := 0

    IF LEN( ALLTRIM( cCod ) ) != 16; RETURN .F.; ENDIF

    FOR nChr = 1 TO 15
        cChr = SUBSTR( cCod, nChr, 1 )
        IF !ISALPHA( cChr ) .AND. !ISDIGIT( cChr ); RETURN .F.; ENDIF
        nPos = ASC( cChr ) - IF( ISALPHA( cChr ), ASC( "A" ), ASC( "0" ) )
        nCod += IF( nChr % 2 = 0, nPos, aCod[ nPos + 1 ] )
    NEXT

    RETURN nCod % 26 = ASC( SUBSTR( cCod, nChr, 1 ) ) - ASC( "A" )


Controllo Partita IVA:

FUNCTION ISIVA( cCod )

    LOCAL nChr, nPos, nCod := 0

    IF LEN( RTRIM( cCod ) ) != 11 .OR. cCod = "00000000000"; RETURN .F.; ENDIF

    FOR nChr = 1 TO 10
        nPos = ASC( SUBSTR( cCod, nChr, 1 ) ) - ASC( "0" )
        nCod += IF( nChr % 2 = 0, INT( nPos * 2 / 10 + ( nPos * 2 ) % 10 ), nPos )
    NEXT

    RETURN ( 10 - nCod % 10 ) % 10 = ASC( SUBSTR( cCod, nChr, 1 ) ) - ASC( "0" )


Per quanto riguarda la generazione, avrei quella per il Codice Fiscale ma richiede anche il database aggiornato dei codici dei comuni.

Se ti serve dimmelo (ma il mio DBF dei codici dei comuni non so quanto sia aggiornato).

EMG
Posts: 3107
Joined: Fri Oct 07, 2005 06:28 PM
Codice fiscale/ partita IVA
Posted: Sat Apr 15, 2006 03:38 PM

io avrei tutto un programma che genera i codici fiscali :sarebbe troppo grande da mettere qui.

Poi ci vuole l'archivio comuni che potrebbe essere reperibile in giro

Best Regards, Saludos



Falconi Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 06:28 PM
Codice fiscale/ partita IVA
Posted: Sat Apr 15, 2006 03:45 PM
Per il controllo dell'iva io uso
/***************************

  function OKIVA( PI, obbligo )

//***************************
// Syntax:  OKIVA( <ExpC>, [<ExpL>] )
// <ExpC> Å  il n. di partita iva (Å  una stringa!)
// <ExpL> se Š .T. la partita IVA Š obbligatoria (default), altrimenti pu• essere vuota
// Restituisce .t.=tutto ok ; .f.= errata

local  s := 0, i, t, pi1, pi2, ok := .f.

IF pcount() = 1
    obbligo = .f.    // default non obbligatoria
ENDIF

s := 0

IF empty( pi )
    return( if( obbligo, .f., .t. ) )  // se obbligatoria ritorna .F.
ENDIF

IF len( alltrim( pi ) ) != 11
    return(.f.)  // .f.
ENDIF

// non vengono controllati gli uffici iva, tanto c'Å  il cecksum...
//IF val(subst(pi,8,3))<1 .or. val(substr(pi,8,3))>100
//    * uffici iva (il 100 esiste - Firenze)
//    return(ok)  // .f.
//ENDIF

i := 1
WHILE i < 11
    pi1 := val(substr(pi,i,1))
    pi2 := val(substr(pi,i+1,1))
    s := s+pi1+2*pi2-9*int(pi2/5)
    i := i+2
ENDDO

t := 10-(s-int(s/10)*10)
IF t = 10
    t := 0
ENDIF

IF t # val(substr(pi,11,1))
    return( ok )  // .f.
ENDIF

ok := .t.
return( ok )  // .T.
Best Regards, Saludos



Falconi Silvio
Posts: 3107
Joined: Fri Oct 07, 2005 06:28 PM
Codice fiscale/ partita IVA
Posted: Sat Apr 15, 2006 03:48 PM
Per il controllo del CF io uso :
*ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
  FUNCTION CFISC( CF, obbligo, CfNasc, CfSex )
*ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß


// controllo codice fiscale

// Syntax: cfisc(<ExpC>, [<ExpL>])
// dove <ExpC> èil numero di codice fiscale da controllare
//      <ExpL> indica se si accetta anche il CF vuoto (default) =.f.
//                                    oppure se è obbligatorio = .t.
// Restituisce: se errato restituisce  .F.
//              se corretto restituisce .T.
//
// Se esistono il 3. e 4. parametro (passati per referenza) 
// vi vengono scritti   CFNasc  (Data di nascita)   tutti formati europei
//                      CFSex   (Sesso  = M F)
//
// per il GET sul Codice Fiscale si consiglia questa Picture:
// @ 10,10 get cod pict "@! AAAAAA99A99A999A"
//                      es: TNLMRZ56C15L552S

local td := "0100050709131517192102041820110306081214161022252423"
local mn := "ABCDEHLMPRST"
local f4 := 0, pp := 0, p := 1
local i, p1, j, CfDataNascita, CfSesso, sep := "", DataVuota

IF obbligo == NIL
    obbligo := .f.  // accetta anche CF vuoto
ENDIF

if CfNasc != NIL
    // Separatori data (formato europeo) possibili:   / - .
    sep := substr(dtoc(date()),3,1)
    // Default
    CfNasc := ctod("  "+sep+"  "+sep+"  ")
    CfSex := " "
endif

CF := upper( alltrim(CF) )
IF LEN(CF) = 0
    // accetta anche Cod fisc. vuoto
    return( !obbligo )   // se CF obbligatorio non passato controllo
ENDIF

IF len(CF) < 16
    return( .f. )  // errore!
ENDIF

FOR I := 1 TO 15
    P1 := ASC( substr( CF, I, 1 ) )
    
    IF P1 > 47 .and. P1 < 58
        P1 -= 48
    ENDIF
    
    IF P1 > 64 .and. P1 < 91
        P1 -= 65
    ENDIF
    
    IF P = 0
        PP += P1
        P := 1
    ELSE
        PP += VAL( substr( TD, (P1*2+1), 2 ) )
        P := 0
    ENDIF
NEXT

PP := (PP - (INT (PP/26) ) * 26) + 65

if chr(pp) != right(cf, 1)
    // codice fiscale errato
    return(.f.)
ENDIF

P1 := VAL( substr( Cf, 10, 2 ) )
CfSesso := "M"
IF P1 > 40
    P1 -= 40
    CfSesso := "F"
ENDIF

IF P1 < 10
    CfDataNascita := "0" + RIGHT( STR( P1, 2 ), 1 )
    J := 0
ELSE
    CfDataNascita := RIGHT( STR( P1, 2 ), 2 )
    J := 0
ENDIF

FOR I := 1 TO 12
    IF substr( Cf, 9, 1) == substr( MN, I, 1 )
        J := I
        I := 12
    ENDIF
NEXT

IF J = 0
    // codice fiscale errato
    return(.f.)
ENDIF

IF J < 10
    CfDataNascita += sep + "0" + RIGHT( STR( J, 2 ), 1 )
ELSE
    CfDataNascita += sep + RIGHT( STR( J, 2 ), 2 )
ENDIF

CfDataNascita += sep + substr( Cf, 7, 2 )

CfNasc := ctod( CfDataNasc )
CfSex := Cfsesso

return(.t.)


eh..spero che ti serva e .....Buona Pasqua!!!!!!!!
Best Regards, Saludos



Falconi Silvio
Posts: 858
Joined: Fri Oct 07, 2005 12:00 PM
Codice fiscale/ partita IVA
Posted: Wed Apr 26, 2006 08:54 AM

Grazie EMG e Silvio.

Marco

Best Regards,



Marco Turco

SOFTWARE XP LLP

Continue the discussion