Home/
 www.icosaedro.it 

 Controllo del codice fiscale e della partita IVA

Ultimo aggiornamento: 2018-06-03

Le funzioni per controllare l'inserimento del codice fiscale e della partita IVA scritte in Bash, C, Delphi, Go, Java, JavaScript, M2, Perl, PHP, Python, Xojo (già REALbasic), Ruby, Smalltalk, Swift e Visual Basic.


ATTENZIONE!

In questa pagina si discute solo di come si verifica il carattere di controllo del codice fiscale e della partita IVA. Non si discute di come si generano questi codici: per avere questa informazione dovrai cercare altrove (in fondo alla pagina, nei riferimenti, ci sono interessanti link al riguardo). Inoltre, il solo fatto che il codice di controllo sia corretto non garantisce che il codice sia esistente né garantisce che corrisponda al soggetto atteso. Lo scopo del carattere di controllo è solo quello di prevenire banali errori di trascrizione.


Indice dei contenuti

Storico degli aggiornamenti
Cosa fanno queste routine
Soluzione con script JavaScript
Miti, superstizioni e falsità
Licenza
Implementazioni in vari linguaggi
Come contribuire
Algoritmi
Riferimenti
Argomenti correlati

Storico degli aggiornamenti

Questo elenco include le nuove implementazioni degli algoritmi in altri linguaggi e le eventuali correzioni alle implementazioni esistenti.

2018-06-03 Corretto errore validazione CF e PIVA implementazione PHP (aggiunto modificatore "D" alla espressione regolare in modo che "$" corrisponda alla fine della stringa e non alla fine di una riga).
2018-01-12 Realizzate le funzioni di controllo anche in Lua (contributo di Marco Banfi).
2017-09-28 Realizzate le funzioni di controllo anche in Ruby (contributo di Filippo Zanella).
2017-05-03 Realizzate le funzioni di controllo anche in Go (contributo di Marco Banfi).
2016-12-05 Corretto grave bug introdotto nei sorgenti Javascript e Delphi perché contenevano caratteri non ASCII. I sorgenti si sono corrotti lo scorso luglio nel passaggio al nuovo server quando il programma di trasferimento file ha deciso di convertirli subdolamente in ISO-8859-1 dall'originale UTF-8. Grazie a Marco Banfi per la segnalazione. Con l'occasione ho anche rinnovato il codice delle routines Javascript per renderlo più elegante.
2016-08-21 Realizzate le funzioni di controllo anche in Python (contributo di Gabriele Muciaccia).
2016-03-21 Realizzate le funzioni di controllo anche in Swift (contributo di Rino Setola).
2012-05-12 Aggiornate routine PHP in modo da usare preg_match() al posto della funzione ereg() ormai obsoleta (suggerimento di Niki Romagnoli).
2009-10-15 Corretta funzione P.IVA in REALbasic (Vincenzo).
2009-09-04 Realizzate le funzioni di controllo anche in Smalltalk (contributo di Laura Frigerio).
2007-03-27 Rimosso suggerimento per il controllo del C.F. usando una espressione regolare.
2004-02-16 Suggerimento per il controllo del C.F. usando una espressione regolare (contributo di Alan Lenni).
2003-09-13 Realizzate le funzioni di controllo anche in REALbasic (contributo di Giovanni Gualeni).
2003-06-30 Realizzate le funzioni di controllo anche in Delphi (contributo di Luca Leoncavallo).
2003-05-29 Realizzate le funzioni di controllo anche in Visual Basic (contributo di Carlo Marchesini).
2002-07-27 Descrizione degli algoritmi usati.
2002-04-06 Realizzate le funzioni di controllo anche in Java.
2002-04-06 Realizzate le funzioni di controllo anche in C e Perl.
2001-10-25 Realizzate le funzioni di controllo anche in JavaScript, con la possibilità di provarle on-line in questa stessa pagina.
2001-09-23 Corretta implementazione in bash del controllo codice fiscale.

Cosa fanno queste routine

Riporto qui l'implementazione delle solite funzioni per il controllo del codice fiscale e della partita IVA, utili per validare il data entry nei programmi e nel form del WEB. Sono realizzate in vari linguaggi per il controllo lato server nelle applicazioni WEB e nei programmi stand-alone, e in JavaScript per il controllo lato client nelle applicazioni WEB. Un ringraziamento particolare va a tutti coloro che hanno contribuito con le implementazioni in vari linguaggi.

Queste implementazioni fanno uso delle convenzioni seguenti:

Spesso funzioni di utilità del tipo qui presentate si usano per convalidare l'input dell'utente su di un form HTML: i vari campi di input devono essere controllati uno ad uno, e gli eventuali errori devono essere individuati e segnalati all'utente. E' cosa sana e giusta verificare tutti i campi di input e, se ci sono errori, segnalarli all'utente in una soluzione unica. Un modo semplice per realizzare la cosa è quello di inizializzare una variabile $err alla stringa vuota, e in essa accumulare i messaggi diagnostici man mano che vengono rilevati errori. Al termine dei controlli, se questa variabile è ancora una stringa vuota, allora non ci sono errori nei dati inseriti dall'utente; altrimenti, la variabile stessa contiene l'elenco completo sui problemi trovati.
Esempio in PHP:

    # in $err accumulo tutti i messaggi diagnostici:
    $err = "";

    # controllo i vari campi della maschera di input, accumulando in
    # $err i vari messaggi diagnostici, in modo da proporli in seguito
    # tutti insieme:
    # ...

    # controllo del C.F.:
    if( strlen($cf) == 0 ){
        $err = $err . "<li>Hai omesso il codice fiscale.\n";
    } else {
        $err = $err . ControllaCF($cf);
    }

    if( strlen($err) > 0 ){
        echo("<html><body><h1>ERRORE</h1><ul>$err</ul></body></html>");
        exit(0);
    }

Le routine di controllo del codice fiscale qui proposte si limitano a verificare il carattere di controllo, e al più verificano che siano presenti solo lettere e cifre in un ordine qualsiasi. In generale in certe posizioni del CF ci sono delle lettere, e in altre ci sono delle cifre, ma questo non è sempre vero. Esistono casi di persone diverse che risultano avere CF uguali (omocodie) per cui il ministero sostituisce alcune cifre con delle lettere secondo una particolare tabella fino a risolvere la collisione. Ne segue che non è possibile un controllo più stringente, per esempio tramite una espressione regolare. Le routine presentate in questa pagina hanno l'unica utilità di rilevare eventuali banali errori di trascrizione.

Soluzione con script JavaScript

Il controllo dei dati immessi deve sempre essere eseguito lato server. Tuttavia, per velocizzare l'interazione, è utile eseguire un controllo preventivo anche lato client. Ormai tutti i browser WEB supportano il linguaggio di scripting JavaScript di Netscape: usiamolo! Ecco ad esempio un piccolo strumento di verifica on-line così realizzato: inserire un C.F. o una P.IVA, e il sorgente JavaScript incorporato in questa pagina mostrerà l'esito del controllo:


Codice Fiscale o Partita IVA:

Naturalmente è necessario avere abilitato l'interprete JavaScript nel proprio browser, come di norma è per default. Si può guardare al sorgente di questa pagina per vedere un esempio di impiego di questa soluzione.

Potete fare liberamente le vostre prove: i dati immessi vengono elaborati localmente al vostro computer, e quindi non attraversano la rete nè vengono memorizzati altrove se non nella pagina del vostro browser.


ATTENZIONE!

Se il carattere di controllo risulta "valido" questo NON ASSICURA che il codice fiscale o la partita IVA inserita esistano realmente. Ad esempio la partita IVA 00000000000 costituita da 11 cifre zero risulta "valida" nel senso che l'ultimo carattere è proprio il carattere di controllo corretto per i precedenti 10.


Miti, superstizioni e falsità

Ci sono molte credenze sbagliate intorno alla verifica del C.F. e della P.IVA. Esaminiamo le più comuni.

1. La credenza più comune è che il C.F. si possa costruire una volta noto il nome della persona, il suo sesso e la data e il luogo di nascita. Addirittura ci sono siti WEB e programmi che "costruiscono" il C.F. a partire dai dati anagrafici. Sebbene questi programmi diano spesso la risposta giusta, in generale il valore fornito non è affidabile né potrebbe esserlo, perché solo il Ministero delle Entrate può attribuire questi codici e risolvere le omocodie.

2. Alcuni ritengono che, sebbene gli algoritmi che ricostruiscono il C.F. non possano essere affidabili, la percentuale di errori commessi sia comunque trascurabile, e quindi valga la pena aggiungere comunque anche questo controllo. Questo controllo ulteriore sarebbe utile soprattutto nei siti WEB, in modo da filtrare via le persone che tentano di registrarsi o di fare acquisti fornendo dati fasulli. E' un errore, perché chi vuole fornire dati fasulli ha l'accortezza di fornire dati verosimili e che non destino sospetti, e quindi inventerà l'identità fittizia di un Mario Rossi qualsiasi e fornirà un C.F. apparentemente corretto superando ogni validazione. Invece alcune persone del tutto oneste si vedranno rifiutare l'acquisto o la registrazione perché il loro C.F. risulta non valido secondo questi algoritmi. E' il problema che mi hanno sottoposto alcune persone che, per effetto delle omocodie, hanno delle cifre al posto delle lettere. Ho suggerito a queste persone di segnalare il problema ai gestori del sito e poi cambiare sito WEB. Applicare questi algoritmi di costruzione del C.F. non scoraggia le persone malevoli mentre crea problemi alle persone in buona fede.

3. Alcuni osservano che i primi 6 caratteri del C.F. sono sempre lettere, cui seguono 2 cifre, poi una lettera, ecc. e pertanto sottopongono il C.F. a un controllo ulteriore mediante una espressione regolare. E' un errore che ho fatto anche io. Sempre a causa del problema delle omocodie, al posto delle lettere possono apparire delle cifre. Applicare una regex in questo caso significa ricadere nel problema del punto precedente, cioè penalizzare le persone in buona fede senza impensierire minimamente l'improbabile Mario Rossi nato l'1/1/1900 codice fiscale tarocco MRORSS00A00A000U.

4. Alcuni propongono di sottoporre il C.F. e la P.IVA ad ulteriori controlli di verosimiglianza euristici. Per esempio la P.IVA 00000000000 sembra evidentemente falsa, come anche 44444444440, oppure 12345678903 e molti altri valori "sospetti". Altro errore. Nulla garantisce che qualche persona fisica o giuridica non possegga uno di tali codici ridondanti. Il signor Mario Rossi col C.F. tarocco, oppure la ditta fantasma Truffe & Bidoni s.r.l. forniranno sempre un codice verosimile per non destare sospetti, mentre soggetti del tutto in buona fede ma sfortunatamente dotati di un codice particolarmente "regolare" verranno rifiutati dal programma.

Morale: non aggiungere controlli euristici arbitrari perché:

Licenza

I programmi qui pubblicati sono assolutamente gratuiti (free) e di pubblico dominio per qualsiasi uso; anche i sorgenti sono utilizzabili liberamente e sono di pubblico dominio. Non è necessario citare l'autore o la fonte, sebbene sarebbe deontologicamente corretto farlo. Citare la fonte sarebbe anche utile per facilitare la ricerca di eventuali aggiornamenti e correzioni, che verrebbero pubblicati in questa pagina e citati nello storico che appare all'inizio.

Sebbene io e gli altri autori delle routine abbiamo posto la massima cura nel realizzare questi programmi e nel verificare la loro validità, tuttavia non ci assumiamo nessuna responsabilità nel caso venissero riscontrati malfunzionamenti o altri difetti. Sarò grato a chiunque voglia segnalarmi eventuali problemi riscontrati.

Implementazioni in vari linguaggi

Linguaggio Algoritmo
Codice Fiscale Partita I.V.A.
Bash
C
Delphi (1) (1)
Go (7) (7)
Java
JavaScript
Lua (7) (7)
M2
Perl
PHP
Python (6) (6)
Ruby (8) (8)
Smalltalk (3) (3)
Swift (5) (5)
Visual Basic (4) (4)
Xojo (già REALbasic) (2) (2)
1. Contributo di Luca Leoncavallo <lleoncavalloeconb.com>.
2. Contributo di Giovanni Gualeni <ggualenilibero.it>.
3. Contributo di Laura Frigerio <laura.frigeriolifeware.ch>.
4. Contributo di Carlo Marchesini <archmarchesini-it.com>.
5. Contributo di Rino Setola <rinosetolagmail.com>.
6. Contributo di Gabriele Muciaccia <gabrielemuciacciaonenetbeyond.org>.
7. Contributo di Marco Banfi <mbanfigmail.com>.
8. Contributo di Filippo Zanella <filipposellfapp.com>.

Come contribuire

Hai realizzato le routine del controllo CF e PIVA nel linguaggio X e vorresti vederle pubblicate qui? Ecco come fare:

Algoritmi

Ecco la spiegazione degli algoritmi che si usano per la verifica del codice fiscale e della partita iva.

Codice fiscale. E' composto da 16 caratteri alfanumerici. L'ultimo carattere è il carattere di controllo che vogliamo verificare:

1. si pone s=0
2. si considerano i caratteri di posto dispari dal primo al
   quindicesimo e si convertono in numeri secondo questa tabella:

    0 -> 1
    1 -> 0
    2 -> 5
    3 -> 7
    4 -> 9
    5 -> 13
    6 -> 15
    7 -> 17
    8 -> 19
    9 -> 21
    A -> 1
    B -> 0
    C -> 5
    D -> 7
    E -> 9
    F -> 13
    G -> 15
    H -> 17
    I -> 19
    J -> 21
    K -> 2
    L -> 4
    M -> 18
    N -> 20
    O -> 11
    P -> 3
    Q -> 6
    R -> 8
    S -> 12
    T -> 14
    U -> 16
    V -> 10
    W -> 22
    X -> 25
    Y -> 24
    Z -> 23

I numeri corrispondenti a ciascun carattere vanno sommati ad s.

3. si considerano i caratteri di posto pari dal secondo al
   quattordicesimo e si convertono in numeri secondo questa
   tabella:

    0 -> 0
    1 -> 1
    2 -> 2
    ...
    9 -> 9
    A -> 0
    B -> 1
    C -> 2
    ...
    Z -> 25

Notare che alle cifre corrisponde il valore stesso, mentre alle lettere
A-Z corrispondono i numeri 0-25.
I numeri corrispondenti a ciascun carattere vanno sommati ad s.

4. si calcola il resto della divisione di s per 26:
   r=s%26 cioe' r=s-26*int(s/26); risulta un numero tra 0 e 25;
5. si converte r in una lettera associando a 0 la A, a 1 la B, ...,
   a 25 la Z
6. la lettera ottenuta al punto 5 deve corrispondere all'ultimo
   carattere del cod.fiscale (che e' sempre una lettera).
Esempio: ABCDEF12B23P432P
1. s=0
2. s=1+5+9+0+0+7+9+5
3. s=s+1+3+5+2+2+15+3=67
4. r=67%26=15
5. al 15 corrisponde la lettera "P"
6. OK.

Partita I.V.A. E' composta da 11 cifre. L'ultima cifra è il carattere di controllo che vogliamo verificare:

1. si pone s=0
2. sommare ad s le cifre di posto dispari (dalla prima alla nona)
3. per ogni cifra di posto pari (dalla seconda alla decima),
   moltiplicare la cifra per due e, se risulta piu' di 9,
   sottrarre 9; quindi aggiungere il risultato a s;

   ATTENZIONE!   L'operazione "se risulta piu' di 9, sottrarre 9"
   ===========   e' molto simile ma non equivalente al resto modulo 9!
                 Infatti se la cifra e' 9 allora 2*9=18 per cui si
                 sottrae 9 ottenendo ancora 9, mentre (2*9)%9=0 che
                 e' sbagliato.

4. si calcola il resto della divisione di s per 10:
   r=s%10 cioe' r=s-10*int(s/10); risulta un numero tra 0 e 9;
5. se r=0 si pone c=0, altrimenti si pone c=10-r
6. l'ultima cifra del cod. fisc. deve valere c.
Esempio: 12345678903
1. s=0
2. s=1+3+5+7+9=25
3. s=s+4+8+3+7+0=47
4. r=7
5. c=3
6. OK.

Riferimenti

Argomenti correlati


Umberto Salsi

Contatto
Mappa
Home/
An abstract of the lastest comments from the visitors of this page follows. Please, use the Comments link above to read all the messages or to add your contribute.

2014-04-03 by Guest
Questa pagina è preziosa
Dovrebbe essere messa su wikipedia con tanto di cappello a te che l'hai fatta. Grazie :)[]

2012-05-15 by Guest
Web Service Partite IVA Comunitarie
Per le Partita IVA esiste un Web Service della CE da poter utilizzare nella proprie applicazioni. I dettagli sul mio Blog http://musarra.wordpress.com/2012/05/13/web-service-partite-iva-comunitarie/ e http://musarra.wordpress.com/2010/02/11/consumiamo-i-servizi-dellagenzia-delle-entrate-partite-iva-comunitarie/ Bye, Antonio M.[]

2012-01-13 by lbit
test più approfonditi (in javascript)
Mi sono imbattuto anch'io nel problema di verificare i CF e ho trovato molto utili le info in questa pagina. Ho un paio di osservazioni sui "miti": - mito 2: i casi di omocodia vengono risolti sostituendo lettere al posto delle cifre (e non "cifre al posto delle lettere"); dato che ci sono 7 cifre nel CF che posono venire sostituite con lettere, questo significa che ci sono 128 (2^7) possibili codici fiscali per ogni input (nome,cognome,sesso,data di nascita,comune). Quindi è vero che partendo dai dati anagrafici non è possibile calcolare il CF con certezza (non sappiamo quale tra quei 128 gli è stato assegnato), però se in un modulo chiediamo di inserire anche il codice fiscale, possiamo sicuramente stabilire con certezza se il CF inserito corrisponde ai dati inseriti o meno, basta assicurarsi che sia uno dei 128 validi per quei dati, senza nessun rischio di errore neanche in caso di omocodie. Basta verificare prima il carattere di controllo, poi riportare i caratteri corrispondenti a[...][]

2011-01-21 by Guest
python codice fiscale
gia che ci sono vi do pure quello del cf: _cf_odd = [ 1, 0, 5, 7, 9, 13, 15, 17, 19, 21, # 0 - 9 0, 0, 0, 0, 0, 0, 0, # :;<=>?@ 1, 0, 5, 7, 9, 13, 15, 17, 19, 21, # A-Z 2, 4, 18, 20, 11, 3, 6, 8, 12, 14, 16, 10, 22, 25, 24, 23 ] _cf_even = range(10) + [ 0, 0, 0, 0, 0, 0, 0 ] + range(26) def cf(value): ctrlchar = ord(value[15].upper()) - 65 value = map(lambda x: ord(x.upper()) - 48, value) checksum = sum(map(lambda x: _cf_even[value[x]], xrange(1, 14, 2))) checksum += sum(map(lambda x: _cf_odd[value[x]], xrange(0, 15, 2))) checksum %= 26 return checksum == ctrlchar ciao sherpya[]

2011-01-21 by Guest
python
def piva(value): if (len(value) != 11) or not value.isdigit(): return False value = map(int, value) checksum = sum(map(lambda x: value[x], xrange(0, 10, 2))) checksum += sum(map(lambda x: (2 * value[x]) % 9, xrange(1, 10, 2))) checksum = 10 - (checksum % 10) return value[10] == checksum saluti sherpya[]

2010-07-08 by Guest
correttezza del CF
Io credo che sia comunque importante fornire uno strumento di controllo della correttezza del CF a patto però che in caso di non superamento di esso si limiti ad un avvertimento. Mostro un ipotetico scenario: una persona che si chiama CARLO ALBERTO ROSSI (nome inventato)per associarsi ad un centro XXX deve compilare i dati per la privacy: siccome questa persona viene regolarmente chiamata CARLO, nel campo nome scrive solamente CARLO. Siccome la società XXX che tiene il registro dei soci a fini fiscali ha la necessità che ad ogni CF corrispondano esattamente i dati di quella stessa persona, è chiaro che il CF immesso dal nostro nuovo socio pur essendo corretto, non corrisponderebbe ai dati anagrafici di esso. Uno strumento di controllo in questo caso rivelerebbe l'errore. Spero di essermi spiegato decentemente. Un saluto a tutti []

2010-02-26 by Guest
Il controllo di P.IVA e la Repubblica di San Marino
Volevo ricordare a quanti hanno letto questo interessantissimo articolo (per cui ringrazio l'autore) che l'algoritmo per il controllo della Partiva Iva ha ovviamente senso solo per Partita IVA italiana. Recentemente mi sono imbattuto in una partiva iva della Repubblica di San Marino che ha il formato SM12345 (ovvero SM+5 numeri!) di cui ignoro la validazione. Restano quindi sempre valide le raccomandazioni dell'autore: il controllo non blocca i maleintenzionati, ma solo eventuali errori di digitazione. Questi algoritimi possono essere utili come "Avvisi" all'utente, ma comunque che non siano bloccanti... Saluti.[]

2009-08-03 by Guest
codice fiscale - ulteriore restrizione nel check
l' algoritmo proposto dorebbe validare anche questo codice fiscale errato: TLSHLH77RO8Z249T dove al posta di zero otto e' scritto lettera O otto. Dal sito dell' agenzia delle entrare a http://www.agenziaentrate.it/ilwwcm/connect/Nsi/Documentazione/Guide+Fiscali/Annuario+2008+guida/4_Codice_fscale_e_tessera_sanitaria.html dove parla di omocodia si legge: La distinzione avviene effettuando, nell'ambito dei sette caratteri numerici, sistematiche sostituzioni di una o più cifre, a partire da quella più a destra, con corrispondenti caratteri alfabetici Questo porta che è possibile effettuare una ulteriore restrizione sulla validità del codice; e possibile prendere solo le posizioni numeriche ed effettuare un test in modo che se venga trovata una lettera tutto cio che segue deve essere una lettera. Allego piccolo esempio in perl: -----BEGIN----- return ERR_VALIDCHAR if $cf !~/^[A-Z]{6}([A-Z0-9]{2})[A-Z]([A-Z0-9]{2})[A-Z]([A-Z0-9]{3})[A-Z0-9]$/; my $num=$1.$2.$3; #costruisce una stringa forma[...][]

2009-04-14 by Umberto Salsi
Re: miglioramento alla funzione
Anonymous wrote: [...] Secondo il mio modo di pensare, i casi sono due: o l'operatore ha introdotto un dato corretto oppure è sbagliato. Se il dato è corretto, allora il programma deve accettarlo senza ulteriori modifiche o artefatti. Se invece il dato è sbagliato, allora il programma deve rifiutarlo con motivazione, e quindi deve riproporre all'operatore il dato sbagliato esattamente così come lo aveva introdotto. In deroga a questi principi, posso ammettere che vengano eliminati gli spazi initili, e posso ammettere che si cambino le lettere minuscole in maiuscole o viceversa per uniformità di archiviazione delle informazioni. Ora, il preg_replace() che appare nel tuo codice, invece, elimina tutti i caratteri che non sono alfanumerici, cioè cerca di adattare un input magari completamente errato (spesso la gente introduce i dati nelle caselle sbagliate dei form) per renderlo giusto. Questo secondo me non è corretto farlo perché frustrante per l'operatore (l'operatore pretende che il pr[...][]

2009-03-23 by Guest
miglioramento alla funzione
Dato che spessissimo gli utenti inseriscono il CF esattamente come compare (cioè con gli spazi) basta inserire una piccola modifica per migliorare l'efficacia della funzione php. nella funzione che ho implementato ho inserito l'errore in un parametro secondario mentre la funziona ritorna il CF "normalizzato" (tutto maiuscolo e senza caratteri spuri) Da function ControllaCF($cf) { if( $cf == '' ) return ''; if( strlen($cf) != 16 ) ... è diventata function ControllaCF($cf, &$errore) { if( $cf == '' ) return ''; $cf = preg_replace("/[^0-9a-z]+/i", "", $cf); $cf = strtoupper($cf); if( strlen($cf) != 16 ) ... con i messaggi di errore inseriti in $errore mentre la funzione ritorna $cf Il codice chiamante diventa quindi unset($errore); $cf = ControllaCF($cf, $errore); if(!$cf or $errore) { ... controllo condizione di errore ... } ... Hope this helps Chris[]

2008-01-29 by Umberto Salsi
Re: Algoritmo di Generazione Codice Fiscale
Anonymous wrote: [...] L'unico posto dove si parla di 14-esimo carattere è al punto 3 dell'algoritmo del CF, cioè dove di devono considerare i caratteri di posto pari. Il 15-esimo ha posto dispari e quindi lì non c'entra proprio. Per cui non capisco l'obiezione. []

2008-01-29 by Guest
Algoritmo di Generazione Codice Fiscale
Salve nella descrizione dell'algoritmo si parla di arrivare al 14 carattere. In realtà il check viene eseguito fino al 15° carattere. []