summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/codicefiscaleitaliano
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/codicefiscaleitaliano
Initial commit
Diffstat (limited to 'macros/latex/contrib/codicefiscaleitaliano')
-rw-r--r--macros/latex/contrib/codicefiscaleitaliano/README65
-rw-r--r--macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.dtx510
-rw-r--r--macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.pdfbin0 -> 216315 bytes
-rw-r--r--macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.sty127
4 files changed, 702 insertions, 0 deletions
diff --git a/macros/latex/contrib/codicefiscaleitaliano/README b/macros/latex/contrib/codicefiscaleitaliano/README
new file mode 100644
index 0000000000..8a31dee6cc
--- /dev/null
+++ b/macros/latex/contrib/codicefiscaleitaliano/README
@@ -0,0 +1,65 @@
+Codicefiscaleitaliano bundle; version 1.2 2012/05/06
+
+This small package is intended to check the consistency of the Italian
+fiscal code string; a misspelled string is evidently inconsistent, but
+a legal document with a wrong fiscal code string becomes invalid;
+therefore it is important to check this string consistency.
+
+This control can be achieved with this little package that can perform
+all the computations needed for this control.
+
+This work is subject to the LaTeX Project Public Licence, vernon 1.3 or
+later. Any distribution of the TeX system contain the latest available
+copy of the license.
+
+This work is author maintained.
+
+This work consists in the self extracting file codicefiscaleitaliano.dtx,
+and this README file, and of the derived files codicefiscaleitaliano.pdf
+and codicefiscaleitaliano.sty.
+
+If it is not yet included in the TeX system distribution you are using,
+run codicefiscaleitaliano.dtx with pdflatex: then move:
+
+codicefiscaleitaliano.dtx to .../source/latex/codicefiscaleitaliano/
+codicefiscaleitaliano.pdf to .../doc/latex/codicefiscaleitaliano/
+codicefiscaleitaliano.sty to .../tex/latex/codicefiscaleitaliano/
+
+The dots stand for your PERSONAL texmf tree root; if you are on a Windows
+platform change the slashes into backslashes. If these folders are not
+already in your PERSONAL texmf tree, create them.
+
+
+
+Pacchetto codicefiscaleitaliano; versione 1.1 2012/05/03
+
+Questo pacchetto serve per controllare la consistenza del codice fiscale;
+anche il più piccolo refuso che alteri il codice fiscale renderebbe non
+valido qualsiasi documento legale che lo contenesse. Poter controllar e che
+il codice sia consistente è quindi molto importante.
+
+Il controllo può essere eseguito mediante questo pacchetto che è in grado
+di eseguire tutti i calcoli richiesti da questa verifica.
+
+Questo lavoro è soggetto alla Licenza Pubblica del Progetto LaTeX (LPPL)
+versione 1.3 o successive. Ogni distribuzione del sistema TeX contiene
+l'ultima versione disponibile di questa licenza.
+
+Questo lavoro consiste nei file README e codicefiscaleitaliano.dtx
+autoestraente, e nei file derivati codicefiscaleitaliano.pdf e
+codicefiscaleitaliano.sty.
+
+Se non è ancora incluso nella versione del sistema TeX che state usando,
+eseguite il programma pdflatex sul file codicefiscaleitaliano.dtx;
+otterrete i file derivati che vanno spostati nelle seguenti cartelle (se
+non esistono ancora, createle):
+
+codicefiscaleitaliano.dtx --> .../source/latex/codicefiscaleitaliano/
+codicefiscaleitaliano.pdf --> .../doc/latex/codicefiscaleitaliano/
+codicefiscaleitaliano.sty --> .../tex/latex/codicefiscaleitaliano/
+
+I puntini stanno per la radice del vostro albero texmf PERSONALE; se siete
+su una macchina Windows, cambiate le barre diritte in barre rovesce.
+
+Claudio Beccari
+claudio dot beccari at gmail dot com
diff --git a/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.dtx b/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.dtx
new file mode 100644
index 0000000000..6b93eb58a2
--- /dev/null
+++ b/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.dtx
@@ -0,0 +1,510 @@
+% \iffalse
+%<*internal>
+\begingroup
+\input docstrip.tex
+\keepsilent
+\preamble
+ ______________________________________________________
+ The codicefiscaleitaliano package for LaTeX and XeLaTeX
+ Copyright (C) 2012 Claudio Beccari
+ All rights reserved
+
+ License information appended
+
+\endpreamble
+\postamble
+
+Copyright 2012 Claudio Beccari
+
+Distributable under the LaTeX Project Public License,
+version 1.3c or higher (your choice). The latest version of
+this license is at: http://www.latex-project.org/lppl.txt
+
+This work is "author-maintained"
+
+This work consists of this file codicefiscaleitaliano.dtx, a README file
+and the derived files codicefiscaleitaliano.sty and codicefiscaleitaliano.pdf.
+
+\endpostamble
+\askforoverwritefalse
+
+\generate{\file{codicefiscaleitaliano.sty}{\from{codicefiscaleitaliano.dtx}{package}}}
+
+\def\tmpa{plain}
+\ifx\tmpa\fmtname\endgroup\expandafter\bye\fi
+\endgroup
+%</internal>
+%
+%%
+%% File `codicefiscaleitaliano.dtx'.
+%% Copyright (C) 2012 Claudio Beccari all rights reserved.
+%%
+% What follows is the usual trick that is not typeset in the documentation
+% pdf file that is produced by pdfLaTeX. It is used to define the date, the version
+% and the short description that characterizes both this file and the package;
+% the point is that |\ProvidesFile| is being read only by the driver, while
+% |\ProvidePackage| goes to the stripped package file; it must be done before
+% starting the documentation otherwise |\GetFileInfo| can't get the necessary
+% information.
+% \fi
+%
+% \iffalse
+%<+package>\NeedsTeXFormat{LaTeX2e}[2011/06/20]
+%<*driver>
+\ProvidesFile{codicefiscaleitaliano.dtx}%
+%</driver>
+%<+package>\ProvidesPackage{codicefiscaleitaliano}%
+%<*package>
+ [2012/05/06 v.1.2 Controlla il codice fiscale italiano]
+%</package>
+%<*driver>
+\documentclass[letterpaper]{ltxdoc}
+\hfuzz 10pt
+\usepackage{multicol}
+\usepackage[utf8]{inputenc}
+\usepackage[italian,english]{babel}
+\usepackage{array,booktabs,trace}
+\usepackage{codicefiscaleitaliano}
+\GetFileInfo{codicefiscaleitaliano.dtx}
+\title{The extension package \textsf{codicefiscaleitaliano}\thanks{Version number
+\fileversion; last revised \filedate.}}
+\author{Claudio Beccari}
+\date{}
+\begin{document}\errorcontextlines=20
+ \maketitle
+\begin{multicols}{2}
+ \tableofcontents
+ \end{multicols}
+ \DocInput{codicefiscaleitaliano.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{206}
+% \begin{abstract}
+% This small package is meant to help users to check the Italian Fiscal Code spelling;
+% it produces an ``info'' message in the log file if the code is selfconsitent; otherwise,
+% without actually correcting the code, it issues an error message that informs the user
+% of the incorrecteness of the current fiscal code and urges him to provide for a revision,
+% but it does not forbid to continue typesetting the document.
+%
+% This package should be helpful for everybody who typesets legal or financial documents
+% for the Italian Administration Offices; therefore the user either knows Italian or his
+% mother language is Italian; therefore most of the user guide part will be typeset in
+% Italian.
+% \end{abstract}
+%
+% \selectlanguage{italian}
+% \section{Introduzione}
+%
+% Chiunque abbia bisogno di scrivere il codice fiscale di una persona fisica trova
+% grande giovamento se può disporre di un software che gli controlli l'ortografia
+% del codice; basta il più banale refuso che il codice perde ogni validità.
+%
+% Questo pacchetto verifica solo la lettera di controllo, che dipende, secondo un
+% apposito algoritmo, dai precedenti 15 caratteri che formano il codice: è una
+% specie di prova del nove che permette non di trovare l'errore, ma di verificare
+% l'inconsistenza dei caratteri che formano la stringa.
+%
+% Come è noto, il codice fiscale delle perone fisiche è formato da sedici caratteri
+% secondo lo schema seguente:
+% \begin{center}
+% CCCNNNAAMGGLLLLK
+% \end{center}
+% dove:
+%\begin{description}
+%\item[CCC] sono tre lettere estratte dal cognome della persona;
+%\item[NNN] sono tre lettere estratte dal nome della persona;
+%\item[AA] sono le ultime due cifre dell'anno di nascita della persona;
+%\item[M] è una lettera che identifica il mese di nascita della persona;
+%\item[GG] sono le cifre del giorno di nascita della persona, eventualmente
+% aggiunte al numero 40, nel caso delle persone di sesso femminile;
+%\item[LLLL] è il codice indicativo del comune o della nazione straniera di
+% nascita della persona, a seconda che sia nata in Italia o all'estero;
+%\item[K] è la lettera di controllo.
+% \end{description}
+% Per evitare situazioni di \emph{omocodia}, cioè di persone identificate dallo
+% stesso codice, le sette cifre che compaiono normalmente nel codice possono
+% venire sostituite da apposite lettere, ma solo l'Amministrazione Centrale dello
+% Stato può farlo perché solo l'amministrazione conosce quali codici siano già
+% stati attribuiti, a chi e quando.
+% All'utente finale non resta altra possibilità che verificare mediante la lettera
+% di controllo la coerenza dell'intero codice, ma non di generare codici solo
+% a partire dalle generalità di una persona; o meglio, non sarebbe molto complicato
+% farlo, ma si potrebbe solo generare il codice di default, non un codice che
+% garantisca di evitare l'omocodia.
+%
+% \section{Uso del pacchetto}
+%
+% Il pacchetto si carica nel solito modo, mediante |\usepackage|; non ci sono
+% opzioni da esprimere. Lo si usa semplicemente inserendo nel testo da comporre
+% il comando
+%\begin{flushleft}
+%|\codicefiscaleitaliano{|\meta{codice fiscale da controllare}|}|
+%\end{flushleft}
+% Il \meta{codice fiscale da controllare} va scritto in lettere maiuscole. Come
+% impostazione predefinita il comando |\codicefiscaleitaliano| esegue solo la
+% verifica della coerenza del codice immesso. La versione asteriscata
+% |\codicefiscaleitaliano*| produce anche la stampa del codice verificato.
+%
+% Eseguito il controllo il pacchetto si limita di scrivere un messaggio nel file
+% log per ricordare quale codice si è controllato, se l'esito del controllo è
+% positivo. Se il codice fosse inconsistente, invece, il pacchetto scrive un
+% vistoso messaggio di errore indicando il codice inconsistente; non impedisce
+% di continuare a comporre il documento, ma inviita l'utente a ricordarsi di
+% verificare e correggere l'errore. Ovviamente il pacchetto non ``corregge''
+% la lettera di controllo, perché l'errore potrebbe essere in uno o più degli
+% altri 15 caratteri, per cui correggere la lettera di controllo potrebbe
+% consistere nell'aggiungere errore ad errore, producendo un codice con almeno
+% due errori, del tutto invalido ai fini legali; probabilmente potrebbe dare luogo
+% a qualche altro reato, a seconda del documento che si sta scrivendo.
+%
+% Esempio: |\codicefiscaleitaliano{NGLMRA08M64L500N}|
+%\codicefiscaleitaliano{NGLMRA08M64L500N}
+%
+% Siccome il codice è valido, non appaiono messaggi sullo schermo; se fosse stato
+% invalido, sarebbe apparso un vistoso messaggio d'errore sullo schermo.
+%
+% Finché non si controlla un altro codice, il codice corrente è ancora disponibile
+% nella macro |\CFisc| che può essere usata per scrivere il codice senza doverlo
+% ribattere. Infatti ottengo: \CFisc.
+%
+% Peraltro il comando |\codicefiscaleitaliano*{NGLMRA08M64L500N}| produce direttamente
+% \codicefiscaleitaliano*{NGLMRA08M64L500N}. Ma il comando asteriscato non produce
+% niente se il codice fiscale non è consistente, mentre entrambi i comandi definiscono
+% comunque la macro |\CFisc|, il cui uso produce il codice fiscale immesso per essere
+% verificato sia esso consistente oppure errato.
+%
+% Attenzione: devono essere prese alcune precauzioni:
+% \begin{enumerate}
+% \item Il codice fiscale da controllare deve essere immesso \emph{solo} in lettere
+% maiuscole, però può avere i suoi campi spaziati e gli spazi non contano nella determinazione della lunghezza della stringa da controllare. Infatti il codice
+% |\codicefiscaleitaliano*{NGL MRA 08M64 L500 N}| produce nel file log l'informazione
+% che il codice fiscale è consistente e nel testo ripete la stringa spaziata immessa
+% per il controllo: \codicefiscaleitaliano*{NGL MRA 08M64 L500 N}.
+% \item Se il codice immesso ha meno di 16 caratteri, il comando produce un avviso
+% di errore e non esegue nessun controllo.
+% \item Se il codice immesso ha più di 16 caratteri il comando produce un avviso
+% di errore e non esegue nessun controllo.
+% \end{enumerate}
+%
+%\selectlanguage{english}
+% \section{Disclaimer}
+% Although I did my best so as to assure a correct control of the fiscal code
+% string, I cannot be absolutely sure that this control does not produce false
+% positive or false negative results.
+%
+% Since this work is subject to the \LaTeX\ Project Public Licence, it is the
+% case to redirect the user to the full text of this license; here I reproduce
+% only this section:
+%
+% \section{No Warranty}
+%
+% There is no warranty for the Work. Except when otherwise stated in
+% writing, the Copyright Holder provides the Work `as is', without
+% warranty of any kind, either expressed or implied, including, but not
+% limited to, the implied warranties of merchantability and fitness for
+% a particular purpose. The entire risk as to the quality and performance
+% of the Work is with you. Should the Work prove defective, you
+% assume the cost of all necessary servicing, repair, or correction.
+%
+% In no event unless agreed to in writing will the Copyright Holder, or
+% any author named in the components of the Work, or any other party who
+% may distribute and/or modify the Work as permitted above, be liable to
+% you for damages, including any general, special, incidental or
+% consequential damages arising out of any use of the Work or out of
+% inability to use the Work (including, but not limited to, loss of
+% data, data being rendered inaccurate, or losses sustained by anyone as
+% a result of any failure of the Work to operate with any other
+% programs), even if the Copyright Holder or said author or said other
+% party has been advised of the possibility of such damages.
+%
+%
+% \StopEventually{}
+%
+% \section{The documented code}
+% Here begins the code documentation; I warn the reader that this code
+% contains some ``dirty tricks'', at least according to my opinion; therefore
+% the reading might result quite difficult. I try to be clear also
+% for my own behalf, because I would like to be able to understand it when
+% I read it some time from now.
+%
+% In the preamble of this documented \TeX\ file we requested a
+% recent \LaTeX\ kernel; actually this code contains very little \LaTeX\ code,
+% but it requires a sufficiently recent typesetting engine, therefore a
+% sufficiently recent \LaTeX\ kernel; most of the code contained hereafter
+% is primitive \TeX\ code.
+%
+% The control algorithm requires that each fiscal code string character be
+% examined and, according to its position in the code (even or odd position
+% order), be assigned a specific value according to a table established by
+% the law: see table~1.
+%
+%\begin{table}\centering
+%\caption{Values to be assigned to the single characters in the fiscal code
+% string according to their position}
+%\medskip
+%\begin{tabular}{ccc}
+%\toprule
+%\multicolumn1{m{4.5em}}{\centering Character}&
+% \multicolumn1{m{4.5em}}{\centering Even posisiton}&
+% \multicolumn1{m{4.5em}}{\centering Odd position}\\
+%\midrule
+%0 & 0 & 1 \\
+%1 & 1 & 0 \\
+%2 & 2 & 5 \\
+%3 & 3 & 7 \\
+%4 & 4 & 9 \\
+%5 & 5 & 13 \\
+%6 & 6 & 15 \\
+%7 & 7 & 17 \\
+%8 & 8 & 19 \\
+%9 & 9 & 21 \\
+%\midrule
+%A & 0 & 1 \\
+%B & 1 & 0 \\
+%C & 2 & 5 \\
+%D & 3 & 7 \\
+%E & 4 & 9 \\
+%F & 5 & 13 \\
+%G & 6 & 15 \\
+%H & 7 & 17 \\
+%I & 8 & 19 \\
+%J & 9 & 21 \\
+%K & 10 & 2 \\
+%L & 11 & 4 \\
+%M & 12 & 18 \\
+%N & 13 & 20 \\
+%O & 14 & 11 \\
+%P & 15 & 3 \\
+%Q & 16 & 6 \\
+%R & 17 & 8 \\
+%S & 18 & 12 \\
+%T & 19 & 14 \\
+%U & 20 & 16 \\
+%V & 21 & 10 \\
+%W & 22 & 22 \\
+%X & 23 & 25 \\
+%Y & 24 & 24 \\
+%Z & 25 & 23 \\
+%\bottomrule
+%\end{tabular}
+%\end{table}
+%
+% Once assigned the above numeric value to each one of the first fifteen
+% characters of the code, it is necessary to sum them up and compute this
+% sum's modulo~26 value; this value lies in the interval from zero to~25, and
+% it is used to look up in the second column of table~1 which
+% letter corresponds to such a number; this is the computed control letter,
+% and the sixteenth character of the fiscal code string subject to testing
+% must match such computed control letter.
+%
+% We have to produce macros to detach from left to right one
+% character at a time from the fiscal code string; we have to determine its even
+% or odd position, assign it a value and sum up all such values.
+% Such macros should verify also if the input fiscal code is long exactly 16
+% characters long. In particular I prefer to do the following: The recursion
+% goes on for 16 cycles; if before the end of the full recursion the remaining
+% string is void, an error message is issued and code is produced to exit the
+% recursion and the whole procedure. Similarly, if at the end of the recursion
+% the string is not void, another error message is issued and the procedure is
+% exited. We need a couple of logical switches to perform the whole procedure.
+% \iffalse
+%<*package>
+% \fi
+% \begin{macrocode}
+\newif\ifcontrollo \controllotrue
+\newif\ifstampacodice \stampacodicefalse
+% \end{macrocode}
+%
+% First we define a delimited argument macro that detaches the leftmost
+% character and retrieves its \textsc{ascii} address, while reassigning
+% the remaining characters to the possibly shortened fiscal code string;
+% at the end of the process the fiscal code string should vanish.
+%
+% Notice that with the input string right delimited by an exclamation mark,
+% only the first token (the first character) is assigned to argument |#1|,
+% and the remaining string to the second argument |#2|. Notice also that
+% |\Letter| is a \TeX\ counter and the notation |`#1| retrieves the \textsc{ascci}
+% address corresponding to argument |#1|. It would be wrong to write
+% |`\#1| because the |\Letter| counter would be assigned the \textsc{ascii}
+% address of |#|.
+% \begin{macrocode}
+\def\getCFletter#1#2!{\ifx#1\space\getCFLetter#2!\else
+ \Letter=`#1\def\CFisc{#2}\fi}
+% \end{macrocode}
+%
+% Now we generate a macro that assigns counter|\valore| a specific value
+% for odd positioned characters, according to the third column of
+% table~1. We first check if the \textsc{ascii} address of
+% the character precedes that of character `A'; in this is true, we are dealing
+% with a digit, otherwise with a letter. Since the third column of
+% table~1 does not contain ordered values we need a look up
+% table: even better, we need a numeric expression that yields a value between
+% zero and 25 depending on the \textsc{ascii} address of the examined
+% character: such an address is contained in counter |\Letter| therefore we
+% have to subtract the \textsc{ascii} address of zero or of `A' depending if
+% the character is a digit or a letter; this is the purpose of the |\numexpr|
+% numerical expressions performed with the \mbox{$\varepsilon$-\TeX} syntax:
+% \begin{macrocode}
+\def\getOddValore{%
+\ifnum\Letter<\A
+ \valore=\expandafter\ifcase\numexpr\Letter-\zero\relax
+ 1\or0\or5\or7\or9\or13\or15\or17\or19%
+ \or21\fi
+\else
+ \valore=\expandafter\ifcase\numexpr\Letter-\A\relax
+ 1\or0\or5\or7\or9\or13\or15\or17\or19%
+ \or21\or2\or4\or18\or20\or11\or3\or6\or8%
+ \or12\or14\or16\or10\or22\or25\or24\or23\fi
+\fi}
+% \end{macrocode}
+%
+% The corresponding macro for even positioned characters is much simpler,
+% because the values to be assigned the counter |\valore| are simply ordered.
+% \begin{macrocode}
+\def\getEvenValore{%
+\ifnum\Letter<\A
+ \valore=\numexpr\Letter-\zero\relax
+\else
+ \valore=\numexpr\Letter-\A\relax
+\fi}
+% \end{macrocode}
+%
+% Now comes the real testing macro. First the fiscal code string to be checked
+% is assigned to the control sequence |\CFisc|; then a group is opened so that
+% any assignment performed within this group remains local and everything is
+% undone upon closing the group. Several counters are assigned a name; the
+% choice of using counter numbers above 255 is a habit of mine since the time when I
+% first discovered this \makebox{$\varepsilon$-\TeX} feature is permanently
+% included within the modern distributions of the \TeX\ system; apparently this
+% dates back to the year 2005, so that it may be assumed that now every \TeX\
+% distribution in use complies with this upgrade. In any case since we used
+% numerical expression by means of |\numexpr|, this upgrade must be operating,
+% otherwise we'd had already some errors. Of course this package might control
+% by itself if the \makebox{$\varepsilon$-\TeX} features are active, but we
+% hope they are since they have been available for so may years.
+%
+%
+% \begin{macrocode}
+\newcommand*\codicefiscaleitaliano{%
+\@ifstar{\c@dfiscit[\stampacodicetrue]}{\c@dfiscit}}
+\newcommand*\c@dfiscit[2][\stampacodicefalse]{#1\edef\CFisc{#2}%
+\let\codfisc\CFisc
+\begingroup
+\countdef\cifra=256 \cifra=\z@
+\countdef\A=258\A=`\A
+\countdef\zero=260 \zero=`\0
+\countdef\Letter=262
+\countdef\valore=264
+\countdef\somma=266 \somma=\z@
+% \end{macrocode}
+%
+% Then we start a ``while"\dots`do'\dots'' cycle by resorting to the \LaTeX\
+% kernel macro |\@wiledo|; we use the counter |\cifra| to count and point to
+% the position of a character and we cycle trough all the 16 fiscal code
+% characters; on the first run when |\cifra| equals zero, the immediate
+% stepping up by~1 assures that the pointer has always the correct value and
+% parity; the last cycle is entered with |\cifra| holding the value
+% 15, so the cycle is executed, but it is immediately stepped up to 16; this
+% implies that even the sixteenth character is extracted from the fiscal code
+% string (leaving it void) and its even position value is computed in the same
+% way as all other even positioned characters. But this value is added to the
+% total sum within the cycle. Since this should not be done, upon exiting the
+% cycle, we must subtract the last character value from the sum, in order to
+% execute the modular arithmetics on the sum of the first fifteen character
+% values, while at the same time retaining the value associated to the
+% sixteenth character of the fiscal code string to be checked.
+% \begin{macrocode}
+\@whilenum\cifra<16\do{\advance\cifra\@ne
+\ifx\CFisc\@empty
+ \cifra=16\controllofalse
+ \PackageError{codicefiscaleitaliano}{%
+ \MessageBreak
+ **************************************
+ \MessageBreak
+ Il codice fiscale #2\MessageBreak
+ non ha 16 caratteri.
+ \MessageBreak
+ L'esecuzione della verifica viene\MessageBreak
+ interrotta.
+ \MessageBreak
+ **************************************
+ }{Premere <invio> per continuare}%
+\else
+ \expandafter\getCFletter\CFisc!\relax
+ \ifodd\cifra
+ \getOddValore%
+ \else
+ \getEvenValore%
+ \fi
+ \advance\somma\valore
+\fi}\unless\ifx\CFisc\@empty\controllofalse
+ \PackageError{codicefiscaleitaliano}{%
+ \MessageBreak
+ **************************************
+ \MessageBreak
+ Il codice immesso #2\MessageBreak
+ contiene piu' di 16 caratteri.
+ \MessageBreak
+ L'esecuzione della verifica viene\MessageBreak
+ interrotta.
+ \MessageBreak
+ **************************************
+ }{%
+ Premere <invio> per continuare.
+ }%
+\else
+ \ifcontrollo
+ \advance\somma-\valore
+% \end{macrocode}
+%
+% Now we proceed with the actual verification. The input string control letter
+% code is stored in counter |\valore|; we now determine the modular value of
+% the computed sum over the values of the first 15 characters; we use the counter
+% |\Letter|, that we don't need anymore, as a buffer for the integer quotient
+% of the division by 26; we have to use the primitive \TeX\ integer division
+% because the one executed by the \makebox{$\varepsilon$-\TeX} extensions
+% \emph{rounds} the result to the nearest integer, instead of \emph{truncating}
+% it to the nearest lower integer. This done we calculate the integer remainder
+% of the division with a |\numexpr| clause; the result is the value the control
+% letter should have to be consistent with the first 15 characters of the fiscal
+% code string; if these two values do agree, then the fiscal code string is
+% consistent otherwise it is a faulty string, may be with a typo, or just
+% incorrectly read from the plastic card issued by the Ministry of Finance
+% Agency of Incomes, or by any other document. Suitable messages are therefore
+% issued.
+% \begin{macrocode}
+ \Letter\somma
+ \divide\Letter by 26\relax
+ \somma=\numexpr\somma - 26*\Letter\relax
+ \ifnum\valore=\somma
+ \PackageInfo{codicefiscaleitaliano}{\MessageBreak
+ Codice fiscale OK}
+ \else
+ \controllofalse
+ \PackageError{codicefiscaleitaliano}{\MessageBreak
+ ***************************************\MessageBreak
+ Codice fiscale #2 errato\MessageBreak
+ ***************************************}{%
+ Premi S oppure Q oppure <invio>; il file
+ verra' elaborato lo stesso ma il codice
+ fiscale deve venire ricontrollato!}
+ \fi
+ \fi
+\fi\ifcontrollo\ifstampacodice\codfisc\fi\fi\endgroup}
+
+\endinput
+% \end{macrocode}
+% Please, be careful if the fiscal code string is found consistent: it might
+% contain two typos whose effects compensate each other. In any case do not
+% blame me: I did my best to implement the checking algorithm according to
+% the fiscal code legislation; do not blame \TeX\ and company either, because
+% they do their computations the best they can. If it is possible that two
+% or more errors compensate their effects, this is due to the way the fiscal
+% code has been defined.
+% \iffalse
+%</package>
+% \fi
+% \Finale
+% \endinput \ No newline at end of file
diff --git a/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.pdf b/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.pdf
new file mode 100644
index 0000000000..e874c1d2fd
--- /dev/null
+++ b/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.pdf
Binary files differ
diff --git a/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.sty b/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.sty
new file mode 100644
index 0000000000..6d59f18a97
--- /dev/null
+++ b/macros/latex/contrib/codicefiscaleitaliano/codicefiscaleitaliano.sty
@@ -0,0 +1,127 @@
+%%
+%% This is file `codicefiscaleitaliano.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% codicefiscaleitaliano.dtx (with options: `package')
+%% ______________________________________________________
+%% The codicefiscaleitaliano package for LaTeX and XeLaTeX
+%% Copyright (C) 2012 Claudio Beccari
+%% All rights reserved
+%%
+%% License information appended
+%%
+%%
+%% File `codicefiscaleitaliano.dtx'.
+%% Copyright (C) 2012 Claudio Beccari all rights reserved.
+%%
+\NeedsTeXFormat{LaTeX2e}[2011/06/20]
+\ProvidesPackage{codicefiscaleitaliano}%
+ [2012/05/06 v.1.2 Controlla il codice fiscale italiano]
+\newif\ifcontrollo \controllotrue
+\newif\ifstampacodice \stampacodicefalse
+\def\getCFletter#1#2!{\ifx#1\space\getCFLetter#2!\else
+\Letter=`#1\def\CFisc{#2}\fi}
+\def\getOddValore{%
+\ifnum\Letter<\A
+\valore=\expandafter\ifcase\numexpr\Letter-\zero\relax
+1\or0\or5\or7\or9\or13\or15\or17\or19%
+\or21\fi
+\else
+\valore=\expandafter\ifcase\numexpr\Letter-\A\relax
+1\or0\or5\or7\or9\or13\or15\or17\or19%
+\or21\or2\or4\or18\or20\or11\or3\or6\or8%
+\or12\or14\or16\or10\or22\or25\or24\or23\fi
+\fi}
+\def\getEvenValore{%
+\ifnum\Letter<\A
+\valore=\numexpr\Letter-\zero\relax
+\else
+\valore=\numexpr\Letter-\A\relax
+\fi}
+\newcommand*\codicefiscaleitaliano{%
+\@ifstar{\c@dfiscit[\stampacodicetrue]}{\c@dfiscit}}
+\newcommand*\c@dfiscit[2][\stampacodicefalse]{#1\edef\CFisc{#2}%
+\let\codfisc\CFisc
+\begingroup
+\countdef\cifra=256 \cifra=\z@
+\countdef\A=258\A=`\A
+\countdef\zero=260 \zero=`\0
+\countdef\Letter=262
+\countdef\valore=264
+\countdef\somma=266 \somma=\z@
+\@whilenum\cifra<16\do{\advance\cifra\@ne
+\ifx\CFisc\@empty
+\cifra=16\controllofalse
+\PackageError{codicefiscaleitaliano}{%
+\MessageBreak
+**************************************
+\MessageBreak
+Il codice fiscale #2\MessageBreak
+non ha 16 caratteri.
+\MessageBreak
+L'esecuzione della verifica viene\MessageBreak
+interrotta.
+\MessageBreak
+**************************************
+}{Premere <invio> per continuare}%
+\else
+\expandafter\getCFletter\CFisc!\relax
+\ifodd\cifra
+\getOddValore%
+\else
+\getEvenValore%
+\fi
+\advance\somma\valore
+\fi}\unless\ifx\CFisc\@empty\controllofalse
+\PackageError{codicefiscaleitaliano}{%
+\MessageBreak
+**************************************
+\MessageBreak
+Il codice immesso #2\MessageBreak
+contiene piu' di 16 caratteri.
+\MessageBreak
+L'esecuzione della verifica viene\MessageBreak
+interrotta.
+\MessageBreak
+**************************************
+}{%
+Premere <invio> per continuare.
+}%
+\else
+\ifcontrollo
+\advance\somma-\valore
+\Letter\somma
+\divide\Letter by 26\relax
+\somma=\numexpr\somma - 26*\Letter\relax
+\ifnum\valore=\somma
+\PackageInfo{codicefiscaleitaliano}{\MessageBreak
+Codice fiscale OK}
+\else
+\controllofalse
+\PackageError{codicefiscaleitaliano}{\MessageBreak
+***************************************\MessageBreak
+Codice fiscale #2 errato\MessageBreak
+***************************************}{%
+Premi S oppure Q oppure <invio>; il file
+verra' elaborato lo stesso ma il codice
+fiscale deve venire ricontrollato!}
+\fi
+\fi
+\fi\ifcontrollo\ifstampacodice\codfisc\fi\fi\endgroup}
+
+%%
+%% Copyright 2012 Claudio Beccari
+%%
+%% Distributable under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%%
+%% This work is "author-maintained"
+%%
+%% This work consists of this file codicefiscaleitaliano.dtx, a README file
+%% and the derived files codicefiscaleitaliano.sty and codicefiscaleitaliano.pdf.
+%%
+%%
+%% End of file `codicefiscaleitaliano.sty'.