Newsgroup: it.comp.lang.vo-clipper
Titolo: partita iva

Buona sera..
Avrei bisogno di una funzione per il controllo della partita iva in un programma scritto in clipper 5.01
potrebbe aiutarmi?
la ringrazio anticipatamente per la collaborazione.
Felice Lo Iacono
--
TiscaliNet, libero accesso ad Internet.
http://www.tiscalinet.it
-- 
Posted from 
mail-4.tiscalinet.it
 [195.130.225.150] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:3AA4B467...@mail.tiscalinet.it...


Questa è in VO ma non c'è molta differenza
Danilo Giuliani
"FUNCTION Partita_IVA( cPIva ) AS LOGIC
  LOCAL  lVal AS LOGIC
  LOCAL  cPIva1 AS STRING
  LOCAL  cPIva2 AS STRING
  LOCAL  cPIva3 AS STRING
  LOCAL  Ujj AS INT
  LOCAL   I AS INT
  LOCAL   UA01 AS STRING
  LOCAL   UParita AS INT
IF Empty(cPiva)
     RETURN  TRUE
ENDIF
IF SLen( AllTrim( cPIva ) ) < 11
     RETURN ( .F. )
ENDIF
  cPIva1 := SubStr3( cPIva,  1, 7 )
  cPIva2 := SubStr3( cPIva,  8, 3 )
  cPIva3 := SubStr3( cPIva, 11, 1 )
  UJJ:=0
  FOR I := 1 TO 10
     UA01 := Str2( IIF( I%2==0,  2 * Val( SubStr3( cPIva, I, 1 )),
al( SubStr3( cPIva, I, 1 )) ), 2)
     UJJ  += (Val( SubStr3( UA01, 1, 1 ) ) + Val( SubStr3( UA01, 2, 1 ) ))
  NEXT
  UPARITA := (10 - Val( SubStr3( Str( UJJ, 2 ), 2, 1 ) ))
  IF UPARITA == 10
     UPARITA := 0
  ENDIF
  lVal :=  ( UPARITA == Val( cPIva3 ) )
RETURN   lVal

 ha scritto nel messaggio
news:3AA4B467...@mail.tiscalinet.it...

//  controlla la partita iva
function cPivalido( cPiva, color21  )
local cTemp := substr( cPiva,1,10 ), i,  nTempp := 0, nTempd := 0, nTot
local nRet, lRet := .f.
LOCAL cColorold := SETCOLOR(), cVideo := savescreen( 9, 20, 15, 66)
if empty( cPiva )
   return( .t. )
endif
// CIFRE PARI
for i := 2  to len( cTemp )  step 2
   nTempp := nTempp  + riduce( 2 * (val(substr( cTemp, i, 1 ))) )
next
// CIFRE DISPARI
for i := 1  to len( cTemp )  step 2
     nTempd := nTempd + val( substr( cTemp, i, 1 ) )
next
nTot := 10 - val( substr(alltrim(str(nTempp+nTempd)),2,1 ) )
nRet := iif( nTot = 10, 0, nTot )
if ( alltrim(str( nRet)) = substr( cPiva,11,1) )
     lRet := .t.
else
      SBOX( 9, 20, 14, 64, color21, .F. )
      @ 10,21 say " PARTITA IVA  ERRATA " +cPiva
      @ 11,21 SAY " CORREGGILA O CANCELLALA DEL TUTTO"
      @ 12,21 SAY "   poi premi un tasto "
      INKEY(0)
      setcolor(cColorold)
      restscreen(9,20,15,66,cVideo)
endif
return( lRet )
static function riduce( nCifra )
local cCifra
if nCifra >= 10
   cCifra := alltrim( str( nCifra ) )
   nCifra   :=  val( substr( cCifra,1,1) ) + ;
                val( substr( cCifra,2,1) )
endif
return( nCifra )
--
Giandomenico  Giovanni
sa...@ud.nettuno.it

 > la ringrazio anticipatamente per la collaborazione.
Riporto anche quella che uso io:
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" )
EMG

 EMG
Identica alla mia! anche gli stessi nomi di variabile.
L'hai data tu a me o l'ho data io a te?
Ciao...
Claudio Driussi
http://www.swit.net/csoft
mailto:
cldr...@swit.net

 L'hai data tu a me o l'ho data io a te?
Mah, io, a suo tempo, me la scrissi da solo.
EMG

 Mah, io, a suo tempo, me la scrissi da solo.
Allora la hai postata su fidoNet ed io l'ho scaricata da li.
Comunque funziona da anni e non sbaglia un colpo.


 Comunque funziona da anni e non sbaglia un colpo.
E che scrivo routine che sbagliano? :-)))
EMG

 wrote:
Ciao, 
Io uso questa e mi sembra valida: 
func Partiva( Codice )
    local nCHR
    local NPOS
    local NCOD := 0
    if CODICE = space( 11 )
    return .T.
    endif ( CODICE = space( 11 ) )
    for NCHR := 1 to 10
    NPOS := asc( substr( CODICE, nCHR, 1 ) ) - asc( "0" )
    NCOD += if( nCHR % 2 = 0, int( NPOS * 2 / 10 + ( NPOS * 2 ) % 10
), NPOS )
    next
    if ( 10 - NCOD % 10 ) % 10 # asc( substr( CODICE, NCHR, 1 ) ) -
asc( "0" )
            Msg( "Attenzione !!! La partita I.V.A. " + codice + " Š
errata!", "", ;
                    "Effettuare controllo..." )
    endif
    return .T.
 
La funzione Msg proviene dalla libreria Superlib ma può essere
sostituita anche da una funzione simile di avvertimento.
Ciao A tutti :-))

http://users.iol.it/fredaannibale
http://utenti.tripod.it/fredaannibale
http://www.smscash.it/?907949
http://www.smsclub.it/mediabanner.asp?mediauser=59474
a.freda[NOSPAM]@
libero.it
 . togliere [NOSPAM] per comunicare in e-mail