texlive[70916] Master: epcqrcode (11apr24)
commits+karl at tug.org
commits+karl at tug.org
Thu Apr 11 21:55:15 CEST 2024
Revision: 70916
https://tug.org/svn/texlive?view=revision&revision=70916
Author: karl
Date: 2024-04-11 21:55:15 +0200 (Thu, 11 Apr 2024)
Log Message:
-----------
epcqrcode (11apr24)
Modified Paths:
--------------
trunk/Master/tlpkg/bin/tlpkg-ctan-check
trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
Added Paths:
-----------
trunk/Master/texmf-dist/doc/latex/epcqrcode/
trunk/Master/texmf-dist/doc/latex/epcqrcode/README
trunk/Master/texmf-dist/doc/latex/epcqrcode/epcqrcode-doc.pdf
trunk/Master/texmf-dist/source/latex/epcqrcode/
trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.dtx
trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.ins
trunk/Master/texmf-dist/tex/latex/epcqrcode/
trunk/Master/texmf-dist/tex/latex/epcqrcode/epcqrcode.sty
trunk/Master/tlpkg/tlpsrc/epcqrcode.tlpsrc
Added: trunk/Master/texmf-dist/doc/latex/epcqrcode/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/epcqrcode/README (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/epcqrcode/README 2024-04-11 19:55:15 UTC (rev 70916)
@@ -0,0 +1,46 @@
+==============================================================================
+
+The `epcqrcode' package v1.0
+Copyright (C) 2024 by David Wedekind, Paul Kantiem, Dr. rer. nat. Wolf Müller (epc-qr-code at proton.me)
+
+This package is a wrapper for the 'qrcode' package.
+It generates valid EPC QR codes by providing syntax and validity checks for given inputs.
+
+Changes:
+- 2024-02-07 Initial version
+==============================================================================
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2008-05-04 or later.
+
+
+==============================================================================
+
+ This work consists of the files:
+README (this file)
+epcqrcode.dtx
+epcqrcode.ins
+ and the derived file:
+epcqrcode.sty
+
+ The distribution consists of the files:
+README (this file)
+epcqrcode.dtx
+epcqrcode.ins
+epcqrcode-doc.pdf (the user manual)
+
+-----------------------------------------------------------------
+
+ To install the package:
+- run: latex epcqrcode.ins (which will generate epcqrcode.sty)
+- Move epcqrqcode.sty to a location where LaTeX will find it (typically
+ in a local texmf tree at tex/latex/epcqrcode) and refresh the
+ file database. See the FAQ on CTAN at help/uk-tex-faq or
+ http://www.tug.ac.uk/faq for more information on this.
+ To process the user manual
+- run: pdflatex epcqrcode.dtx
Property changes on: trunk/Master/texmf-dist/doc/latex/epcqrcode/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/epcqrcode/epcqrcode-doc.pdf
===================================================================
(Binary files differ)
Index: trunk/Master/texmf-dist/doc/latex/epcqrcode/epcqrcode-doc.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/epcqrcode/epcqrcode-doc.pdf 2024-04-11 19:54:38 UTC (rev 70915)
+++ trunk/Master/texmf-dist/doc/latex/epcqrcode/epcqrcode-doc.pdf 2024-04-11 19:55:15 UTC (rev 70916)
Property changes on: trunk/Master/texmf-dist/doc/latex/epcqrcode/epcqrcode-doc.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.dtx (rev 0)
+++ trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.dtx 2024-04-11 19:55:15 UTC (rev 70916)
@@ -0,0 +1,710 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 by David Wedekind, Paul Kantiem, Dr. rer. nat. Wolf Müller (epc-qr-code at proton.me)
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either
+% version 1.3 of this license or (at your option) any later
+% version. The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3c or later is part of all distributions of
+% LaTeX version 2008-05-04 or later.
+%
+% \fi
+%
+% \iffalse
+%<package>\NeedsTeXFormat{LaTeX2e}[2022-06-01]%
+%<package>\ProvidesPackage{epcqrcode}[2024-02-07 v1.0 dtx epcqrcode file]%
+%<package>\RequirePackage{qrcode}%
+%<package>\RequirePackage{xstring}%
+%<package>\RequirePackage{calculator}%
+%
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage{epcqrcode}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\PrintChanges
+\PrintIndex
+\OnlyDescription
+\begin{document}
+ \DocInput{epcqrcode.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{v1.0}{2024/02/07}{Initial version}
+% \GetFileInfo{epcqrcode.sty}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
+% \DoNotIndex{\@ne}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
+% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\endgroup}
+%
+% \title{The \textsf{epcqrcode} package\thanks{This document
+% corresponds to \textsf{epcqrcode}~\fileversion,
+% dated~\filedate.}}
+% \author{David Wedekind, Paul Kantiem, Dr. rer. nat. Wolf Müller \\ epc-qr-code at proton.me}
+% \date{February 07, 2024}
+%
+% \maketitle
+%
+% \section{Introduction}
+% This package is a wrapper for the \texttt{qrcode} package.
+% It offers an easy way to generate valid EPC QR codes by providing
+% syntax and validity checks, e.g. verifiying the correctness of the
+% IBAN.
+%
+% \section{Usage}
+%
+% \DescribeMacro{\epcqr}
+% The \texttt{\textbackslash epcqr} command uses the \LaTeX -builtin key-value system
+% to parse the user input. There are 3 mandatory keys to produce a
+% valid EPC QR code: \texttt{name}, \texttt{iban} and \texttt{amount}.
+% The following code produces a minimal example.
+% \\
+% \\
+%{
+%\tt
+%|\epcqr{| \\
+%| name=Wikimedia Foerdergesellschaft,| \\
+%| iban=DE33100205000001194700,| \\
+%| amount=123.45,| \\
+%|}|
+%}
+% \begin{center}
+% \epcqr{name=Wikimedia Foerdergesellschaft,iban=DE33100205000001194700,amount=123.45}
+% \end{center}
+% Note, that the maximum payload is limited to 334 bytes.
+% More specific information can be found in the guidelines\footnote{https://www.europeanpaymentscouncil.eu/document-library/guidance-documents/quick-response-code-guidelines-enable-data-capture-initiation}.
+% As of now the user is responsible to stay within this limit,
+% if they are using characters which are not part of following
+% character set:
+% (As specified under section 1.4 in the Customer-to-PSP Implementation Guidelines\footnote{https://www.europeanpaymentscouncil.eu/document-library/implementation-guidelines/sepa-credit-transfer-customer-psp-implementation})
+% \begin{center}
+% \texttt{a b c d e f g h i j k l m n o p q r s t u v w x y z}
+% \\
+% \texttt{A B C D E F G H I J K L M N O P Q R S T U V W X Y Z}
+% \\
+% \texttt{0 1 2 3 4 5 6 7 8 9}
+% \\
+% \texttt{/ - ? : ( ) . , ' +}
+% \\
+% \texttt{Space}
+% \end{center}
+% Additionally to the mandatory arguments, the user can provide more information:
+% \\
+% \\
+% \DescribeMacro{bic}
+% (Optional) The BIC code of the Beneficiary Payment Service Provider.
+% \\
+% \\
+% \DescribeMacro{name}
+% (Mandatory) The name of the Beneficiary. Maximum length is 70 characters.
+% \\
+% \\
+% \DescribeMacro{iban}
+% (Mandatory) The IBAN of the account of the Beneficiary
+% \\
+% \\
+% \DescribeMacro{amount}
+% (Mandatory)
+% Amount of the SEPA Credit Transfer in euro.
+% Amount must be larger than or equal to 0.01, and
+% cannot be larger than 999999999.99.
+% \\
+% \\
+% \DescribeMacro{reason}
+% (Optional)
+% Purpose of the SEPA Credit Transfer.
+% \\
+% \\
+% \DescribeMacro{ref}
+% (Optional)
+% The Remittance Information (a structured creditor reference code).
+% Note: If a reference code is given \texttt{text} must be empty.
+% \\
+% \\
+% \DescribeMacro{text}
+% (Optional)
+% The Remittance Information (an unstructured text).
+% Maximum Length is 140 characters.
+% Note: If a text is given \texttt{ref} must be empty.
+% \\
+% \\
+% \DescribeMacro{information}
+% (Optional)
+% Additional information for the user.
+% Maximum Length is 70 characters.
+%
+% \section{Options}
+% Since this package is a wrapper for the \texttt{qrcode} package, all of its
+% options can also be specified here using the \texttt{\textbackslash qrset} command.
+% \\
+% \\
+%{\tt
+%|\begin{document}| \\
+%| \qrset{height=5cm}%| \\
+%| \epcqr{| \\
+%| name=Wikimedia Foerdergesellschaft,| \\
+%| iban=DE33100205000001194700,| \\
+%| amount=123.45,| \\
+%| }| \\
+%|\end{document}|
+%}
+% \\
+% \\
+% Changing the level of the QR code does not have an effect, as EPC QR codes
+% have a set level.
+%
+%\StopEventually
+
+\newcommand{\epcqrcode at panic}[1]{\PackageError{epcqr}{#1}{Get some help...}}%
+
+\makeatletter%
+\DeclareKeys[epcqr]{%
+charset .store = \epcqr at charset,%
+bic .store = \epcqr at bic,%
+name .store = \epcqr at name,%
+iban .store = \epcqr at iban,%
+amount .store = \epcqr at amount,%
+reason .store = \epcqr at reason,%
+ref .store = \epcqr at ref,%
+text .store = \epcqr at text,%
+information .store = \epcqr at information%
+}%
+
+\newcounter{epcqrcode at IsBiggerIndex}%
+\newcommand{\epcqrcode at IsBiggerResult}{\empty}%
+\newcommand{\epcqrcode at IsBiggerIter}[2]{%
+ \StrChar{#1}{\value{epcqrcode at IsBiggerIndex}}[\epcqrcode at Firstepcqrcode@Current]%
+ \StrChar{#2}{\value{epcqrcode at IsBiggerIndex}}[\epcqrcode at Secondepcqrcode@Current]%
+ \ifx\epcqrcode at Firstepcqrcode@Current\empty%
+ \renewcommand{\epcqrcode at IsBiggerResult}{equal}%
+ \else%
+ \ifnum\epcqrcode at Firstepcqrcode@Current>\epcqrcode at Secondepcqrcode@Current%
+ \renewcommand{\epcqrcode at IsBiggerResult}{true}%
+ \else
+ \ifnum\epcqrcode at Firstepcqrcode@Current<\epcqrcode at Secondepcqrcode@Current%
+ \renewcommand{\epcqrcode at IsBiggerResult}{false}%
+ \else%
+ \stepcounter{epcqrcode at IsBiggerIndex}%
+ \epcqrcode at IsBiggerIter{#1}{#2}%
+ \fi%
+ \fi%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at IsBigger}[2]{%
+ \renewcommand{\epcqrcode at IsBiggerResult}{\empty}%
+ \StrLen{#1}[\epcqrcode at FirstLength]%
+ \StrLen{#2}[\epcqrcode at SecondLength]%
+ \ifnum\epcqrcode at FirstLength>\epcqrcode at SecondLength%
+ \renewcommand{\epcqrcode at IsBiggerResult}{true}%
+ \else%
+ \ifnum\epcqrcode at FirstLength<\epcqrcode at SecondLength%
+ \renewcommand{\epcqrcode at IsBiggerResult}{false}%
+ \else%
+ \renewcommand{\epcqrcode at IsBiggerResult}{\empty}%
+ \setcounter{epcqrcode at IsBiggerIndex}{1}%
+ \epcqrcode at IsBiggerIter{#1}{#2}%
+ \fi%
+ \fi%
+}%
+
+\newcounter{epcqrcode at ModuloIndex}%
+\newcommand{\epcqrcode at Current}{\empty}%
+\newcommand{\epcqrcode at NextNumberIter}{%
+ \stepcounter{epcqrcode at ModuloIndex}%
+ \StrChar{\epcqrcode at Dividend}{\value{epcqrcode at ModuloIndex}}[\epcqrcode at tmp]%
+ \ifx\epcqrcode at tmp\empty%
+ \relax%
+ \else%
+ \edef\epcqrcode at Current{\epcqrcode at Current\epcqrcode at tmp}%
+ \epcqrcode at IsBigger{\epcqrcode at Current}{\epcqrcode at Divisor}%
+ \IfStrEq{\epcqrcode at IsBiggerResult}{true}{}{%
+ \epcqrcode at NextNumberIter%
+ }%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at Dividend}{\empty}%
+\newcommand{\epcqrcode at Divisor}{\empty}%
+\newcommand{\epcqrcode at ModuloIter}{%
+ \StrLen{\epcqrcode at Dividend}[\epcqrcode at DividendLength]%
+ \ifnum\epcqrcode at DividendLength=\theepcqrcode at ModuloIndex%
+ \renewcommand{\epcqrcode at ModuloResult}{\epcqrcode at Current}%
+ \else%
+ \epcqrcode at NextNumberIter%
+ \epcqrcode at IsBigger{\epcqrcode at Divisor}{\epcqrcode at Current}%
+ \IfStrEq{\epcqrcode at IsBiggerResult}{true}{\renewcommand{\epcqrcode at ModuloResult}{\epcqrcode at Current}}{%
+ \INTEGERQUOTIENT{\epcqrcode at Current}{\epcqrcode at Divisor}{\epcqrcode at tmp}%
+ \MULTIPLY{\epcqrcode at Divisor}{\epcqrcode at tmp}{\epcqrcode at tmp}%
+ \SUBTRACT{\epcqrcode at Current}{\epcqrcode at tmp}{\epcqrcode at Current}%
+ \epcqrcode at ModuloIter%
+ }%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at ModuloResult}{\empty}%
+\newcommand{\epcqrcode at Modulo}[2]{%
+ \renewcommand{\epcqrcode at Current}{\empty}%
+ \renewcommand{\epcqrcode at Dividend}{#1}%
+ \renewcommand{\epcqrcode at Divisor}{#2}%
+ \epcqrcode at IsBigger{\epcqrcode at Divisor}{\epcqrcode at Dividend}%
+ \IfStrEq{\epcqrcode at IsBiggerResult}{true}{\renewcommand{\epcqrcode at ModuloResult}{\epcqrcode at Dividend}}{%
+ \IfStrEq{\epcqrcode at IsBiggerResult}{equal}{\renewcommand{\epcqrcode at ModuloResult}{0}}{%
+ \setcounter{epcqrcode at ModuloIndex}{0}%
+ \epcqrcode at ModuloIter%
+ }%
+ }%
+}%
+
+\newcommand{\epcqrcode at CheckCountryCode}[1]{%
+ \IfSubStr{,RU,LC,MT,SC,JO,KW,MU,EG,BR,QA,PS,UA,AL,AZ,BY,BJ,CI,DO,SV,GT,LB,ML,NI,PL,SN,HU,CY,BF,BI,FR,GA,GR,IT,CM,CG,MG,MR,MC,SM,CF,IR,IS,TR,AO,CV,LY,MZ,PT,ST,DZ,AD,VG,MD,PK,RO,SA,SE,SK,ES,CZ,TN,GI,IQ,IL,TL,AE,BH,BG,CR,DE,GE,IE,ME,RS,VA,GB,HR,LV,LI,CH,BA,EE,KZ,XK,LT,LU,MN,AT,MK,SI,DK,FO,FI,GL,NL,SD,BE,NO,}{,#1,}{}{\epcqrcode at panic{Wrong Country Code}}%
+}%
+
+\newcommand{\epcqrcode at CheckIbanLength}[2]{%
+ \IfStrEq{#1}{RU}{\ifnum 33=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LC}{\ifnum 32=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MT}{\ifnum 31=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SC}{\ifnum 31=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{JO}{\ifnum 30=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{KW}{\ifnum 30=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MU}{\ifnum 30=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{EG}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BR}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{QA}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{PS}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{UA}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AL}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AZ}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BY}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BJ}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CI}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{DO}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SV}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GT}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LB}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{ML}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{NI}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{PL}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SN}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{HU}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CY}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BF}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BI}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{FR}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GA}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GR}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IT}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CM}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CG}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MG}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MR}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MC}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SM}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CF}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IR}{\ifnum 26=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IS}{\ifnum 26=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{TR}{\ifnum 26=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AO}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CV}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LY}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MZ}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{PT}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{ST}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{DZ}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AD}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{VG}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MD}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{PK}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{RO}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SA}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SE}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SK}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{ES}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CZ}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{TN}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GI}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IQ}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IL}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{TL}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AE}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BH}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BG}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CR}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{DE}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GE}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IE}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{ME}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{RS}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{VA}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GB}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{HR}{\ifnum 21=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LV}{\ifnum 21=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LI}{\ifnum 21=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CH}{\ifnum 21=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BA}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{EE}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{KZ}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{XK}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LT}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LU}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MN}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AT}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MK}{\ifnum 19=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SI}{\ifnum 19=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{DK}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{FO}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{FI}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GL}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{NL}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SD}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BE}{\ifnum 16=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{NO}{\ifnum 15=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+}%
+
+\newcommand{\epcqrcode at TranslateLetterResult}{\empty}%
+\newcommand{\epcqrcode at TranslateLetter}[1]{%
+ \renewcommand{\epcqrcode at TranslateLetterResult}{\empty}%
+ \IfStrEq{#1}{0}{\renewcommand{\epcqrcode at TranslateLetterResult}{0}}{}%
+ \IfStrEq{#1}{1}{\renewcommand{\epcqrcode at TranslateLetterResult}{1}}{}%
+ \IfStrEq{#1}{2}{\renewcommand{\epcqrcode at TranslateLetterResult}{2}}{}%
+ \IfStrEq{#1}{3}{\renewcommand{\epcqrcode at TranslateLetterResult}{3}}{}%
+ \IfStrEq{#1}{4}{\renewcommand{\epcqrcode at TranslateLetterResult}{4}}{}%
+ \IfStrEq{#1}{5}{\renewcommand{\epcqrcode at TranslateLetterResult}{5}}{}%
+ \IfStrEq{#1}{6}{\renewcommand{\epcqrcode at TranslateLetterResult}{6}}{}%
+ \IfStrEq{#1}{7}{\renewcommand{\epcqrcode at TranslateLetterResult}{7}}{}%
+ \IfStrEq{#1}{8}{\renewcommand{\epcqrcode at TranslateLetterResult}{8}}{}%
+ \IfStrEq{#1}{9}{\renewcommand{\epcqrcode at TranslateLetterResult}{9}}{}%
+ \IfStrEq{#1}{A}{\renewcommand{\epcqrcode at TranslateLetterResult}{10}}{}%
+ \IfStrEq{#1}{B}{\renewcommand{\epcqrcode at TranslateLetterResult}{11}}{}%
+ \IfStrEq{#1}{C}{\renewcommand{\epcqrcode at TranslateLetterResult}{12}}{}%
+ \IfStrEq{#1}{D}{\renewcommand{\epcqrcode at TranslateLetterResult}{13}}{}%
+ \IfStrEq{#1}{E}{\renewcommand{\epcqrcode at TranslateLetterResult}{14}}{}%
+ \IfStrEq{#1}{F}{\renewcommand{\epcqrcode at TranslateLetterResult}{15}}{}%
+ \IfStrEq{#1}{G}{\renewcommand{\epcqrcode at TranslateLetterResult}{16}}{}%
+ \IfStrEq{#1}{H}{\renewcommand{\epcqrcode at TranslateLetterResult}{17}}{}%
+ \IfStrEq{#1}{I}{\renewcommand{\epcqrcode at TranslateLetterResult}{18}}{}%
+ \IfStrEq{#1}{J}{\renewcommand{\epcqrcode at TranslateLetterResult}{19}}{}%
+ \IfStrEq{#1}{K}{\renewcommand{\epcqrcode at TranslateLetterResult}{20}}{}%
+ \IfStrEq{#1}{L}{\renewcommand{\epcqrcode at TranslateLetterResult}{21}}{}%
+ \IfStrEq{#1}{M}{\renewcommand{\epcqrcode at TranslateLetterResult}{22}}{}%
+ \IfStrEq{#1}{N}{\renewcommand{\epcqrcode at TranslateLetterResult}{23}}{}%
+ \IfStrEq{#1}{O}{\renewcommand{\epcqrcode at TranslateLetterResult}{24}}{}%
+ \IfStrEq{#1}{P}{\renewcommand{\epcqrcode at TranslateLetterResult}{25}}{}%
+ \IfStrEq{#1}{Q}{\renewcommand{\epcqrcode at TranslateLetterResult}{26}}{}%
+ \IfStrEq{#1}{R}{\renewcommand{\epcqrcode at TranslateLetterResult}{27}}{}%
+ \IfStrEq{#1}{S}{\renewcommand{\epcqrcode at TranslateLetterResult}{28}}{}%
+ \IfStrEq{#1}{T}{\renewcommand{\epcqrcode at TranslateLetterResult}{29}}{}%
+ \IfStrEq{#1}{U}{\renewcommand{\epcqrcode at TranslateLetterResult}{30}}{}%
+ \IfStrEq{#1}{V}{\renewcommand{\epcqrcode at TranslateLetterResult}{31}}{}%
+ \IfStrEq{#1}{W}{\renewcommand{\epcqrcode at TranslateLetterResult}{32}}{}%
+ \IfStrEq{#1}{X}{\renewcommand{\epcqrcode at TranslateLetterResult}{33}}{}%
+ \IfStrEq{#1}{Y}{\renewcommand{\epcqrcode at TranslateLetterResult}{34}}{}%
+ \IfStrEq{#1}{Z}{\renewcommand{\epcqrcode at TranslateLetterResult}{35}}{}%
+}%
+
+\newcounter{epcqrcode at c}%
+\newcommand{\epcqrcode at TranslateLettersResult}{\empty}%
+\newcommand{\epcqrcode at TranslateLetters}[1]{%
+ \renewcommand{\epcqrcode at TranslateLettersResult}{\empty}%
+ \setcounter{epcqrcode at c}{1}%
+ \epcqrcode at TranslateLettersIter{#1}%
+}%
+
+\newcommand{\epcqrcode at TranslateLettersIter}[1]{%
+ \StrChar{#1}{\theepcqrcode at c}[\epcqrcode at tmp]%
+ \ifx\epcqrcode at tmp\empty%
+ \relax%
+ \else%
+ \epcqrcode at TranslateLetter{\epcqrcode at tmp}%
+ \edef\epcqrcode at current{\epcqrcode at TranslateLetterResult}%
+ \edef\epcqrcode at TranslateLettersResult{\epcqrcode at TranslateLettersResult\epcqrcode at current}%
+ \stepcounter{epcqrcode at c}%
+ \epcqrcode at TranslateLettersIter{#1}%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at CheckIban}[1]{%
+ \StrLen{#1}[\epcqrcode at IbanLength]%
+ \StrLeft{#1}{4}[\epcqrcode at CountryPlusCheck]%
+ \StrRight{\epcqrcode at CountryPlusCheck}{2}[\epcqrcode at Check]%
+ \StrGobbleRight{\epcqrcode at CountryPlusCheck}{2}[\epcqrcode at Country]%
+ \epcqrcode at CheckCountryCode{\epcqrcode at Country}%
+ \epcqrcode at CheckIbanLength{\epcqrcode at Country}{\epcqrcode at IbanLength}%
+ \StrGobbleLeft{#1}{4}[\epcqrcode at Iban]%
+ \epcqrcode at TranslateLetters{\epcqrcode at Iban\epcqrcode at CountryPlusCheck}%
+ \edef\epcqrcode at TranslatedIban{\epcqrcode at TranslateLettersResult}%
+ \epcqrcode at Modulo{\epcqrcode at TranslatedIban}{97}%
+ \ifnum\epcqrcode at ModuloResult=1%
+ \relax%
+ \else%
+ \epcqrcode at panic{Iban check failed}%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at CheckCreditorReference}[1]{%
+ \StrLen{#1}[\epcqrcode at CreditorReferenceLength]%
+ \ifnum\epcqrcode at CreditorReferenceLength>25%
+ \epcqrcode at panic{Creditor reference too long}%
+ \else%
+ \ifnum\epcqrcode at CreditorReferenceLength<5%
+ \epcqrcode at panic{Creditor reference too short}%
+ \fi%
+ \fi%
+ \StrLeft{#1}{4}[\epcqrcode at IdentifierPlusCheck]%
+ \StrGobbleLeft{#1}{4}[\epcqrcode at Reference]%
+ \epcqrcode at TranslateLetters{\epcqrcode at Reference\epcqrcode at IdentifierPlusCheck}%
+ \edef\epcqrcode at TranslatedCreditorReference{\epcqrcode at TranslateLettersResult}%
+ \epcqrcode at Modulo{\epcqrcode at TranslatedCreditorReference}{97}%
+ \ifnum\epcqrcode at ModuloResult=1%
+ \relax%
+ \else%
+ \epcqrcode at panic{Creditor reference check failed}%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at CheckBIC}[1]{%
+ \StrLen{#1}[\epcqrcode at length]%
+ \ifnum8=\epcqrcode at length%
+ \relax%
+ \else%
+ \ifnum11=\epcqrcode at length%
+ \relax%
+ \else%
+ \epcqrcode at panic{Wrong BIC length}%
+ \fi%
+ \fi%
+ \StrChar{#1}{5}[\epcqrcode at FirstCountry]%
+ \StrChar{#1}{6}[\epcqrcode at SecondCountry]%
+ \epcqrcode at CheckCountryCode{\epcqrcode at FirstCountry\epcqrcode at SecondCountry}%
+}%
+
+\newcommand{\epcqrcode at CheckTextLength}[1]{%
+ \StrLen{#1}[\epcqrcode at length]%
+ \ifnum\epcqrcode at length<141\relax\else\PackageWarning{epcqr}{Text possibly too long}\fi%
+}%
+
+\newcommand{\epcqrcode at CheckNameLength}[1]{%
+ \StrLen{#1}[\epcqrcode at length]%
+ \ifnum\epcqrcode at length<71\relax\else\PackageWarning{epcqr}{Name possibly too long}\fi%
+}%
+
+\newcommand{\epcqrcode at CheckReason}[1]{%
+ \IfSubStr{,BENE,BONU,CBFF,CHAR,GOVT,PENS,SALA,SSBE,CBLK,CDCB,CDCD,CDCS,CDOC,CDQC,ETUP,FCOL,MTUP,ACCT,CASH,COLL,CSDB,DEPT,INTC,LIMA,NETT,AGRT,AREN,BEXP,BOCE,COMC,CPYR,GDDS,GDSV,GSCB,LICF,POPE,ROYA,SCVE,SUBS,SUPP,TRAD,COMT,CLPR,DBTC,GOVI,HLRP,INPC,INSU,INTE,LBRI,LIFI,LOAN,LOAR,PENO,PPTI,RINP,TRFD,ADMG,ADVA,BLDM,CCRD,CDBL,CFEE,COST,DCRD,FAND,ICCP,IDCP,IHRP,INSM,MSVC,NOWS,OFEE,OTHR,PADD,PTSP,RCKE,RCPT,REFU,RENT,STDY,TELI,WEBI,ANNI,CAFI,CFDI,CMDT,DERI,DIVD,FREX,HEDG,PRME,SAVG,SECU,SEPI,TREA,ANTS,CVCF,DMEQ,DNTS,HLTC,HLTI,HSPC,ICRF,LTCF,MDCS,VIEW,ALMY,AEMP,BECH,COMM,CSLP,GFRP,GVEA,GVEB,GVEC,GVED,GWLT,EPAY,PAYR,PRCP,RHBS,ESTX,HSTX,INTX,NITX,TAXS,VATX,WHLD,TAXR,AIRB,BUSB,FERB,RLWY,CBTV,ELEC,ENRG,GASB,NWCH,NWCM,OTLC,PHON,WTER,}{,#1,}{}{\epcqrcode at panic{Wrong reason}}%
+}%
+
+\newcommand{\epcqrcode at CheckIfNumber}[1]{%
+ \IfSubStr{,0,1,2,3,4,5,6,7,8,9,}{,#1,}{\relax}{\epcqrcode at panic{Amount has wrong format (not a number)}}%
+}%
+
+\newcommand{\epcqrcode at IterateAmount}[1]{%
+ \StrChar{#1}{\theepcqrcode at c}[\epcqrcode at tmp]%
+ \ifx\epcqrcode at tmp\empty%
+ \relax%
+ \else%
+ \epcqrcode at CheckIfNumber{\epcqrcode at tmp}%
+ \stepcounter{epcqrcode at c}%
+ \epcqrcode at IterateAmount{#1}%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at CheckAmount}[1]{%
+ \edef\epcqrcode at Amount{#1}%
+ \IfSubStr[1]{\epcqrcode at Amount}{.}{%
+ \StrRight{#1}{2}[\epcqrcode at LastTwoChars]%
+ \StrChar{\epcqrcode at LastTwoChars}{1}[\epcqrcode at PotentialDot]%
+ \IfStrEq{\epcqrcode at PotentialDot}{.}{\edef\epcqrcode at Amount{\epcqrcode at Amount0}}{\relax}%
+ }{%
+ \edef\epcqrcode at Amount{\epcqrcode at Amount.00}%
+ }%
+ \StrLen{\epcqrcode at Amount}[\epcqrcode at AmountLength]%
+ \ifnum\epcqrcode at AmountLength>12\epcqrcode at panic{Amount too big}\fi%
+ \ifnum\epcqrcode at AmountLength<4\epcqrcode at panic{Amount too small}\fi%
+ \StrRight{\epcqrcode at Amount}{3}[\epcqrcode at LastThreeChars]%
+ \StrChar{\epcqrcode at LastThreeChars}{1}[\epcqrcode at PotentialDot]%
+ \IfStrEq{\epcqrcode at PotentialDot}{.}{}{\epcqrcode at panic{Amount has wrong format}}%
+ \StrDel[1]{\epcqrcode at Amount}{.}[\epcqrcode at AmountWithoutDot]%
+ \setcounter{epcqrcode at c}{1}%
+ \epcqrcode at IterateAmount{\epcqrcode at AmountWithoutDot}%
+ \ifnum\epcqrcode at AmountLength=4\IfStrEq{\epcqrcode at Amount}{0.00}{\epcqrcode at panic{Amount too small}}{\relax}\fi%
+}%
+
+\newcommand{\epcqrcode at EscapeWhitespaceResult}{\empty}%
+\newcommand{\epcqrcode at EscapeWhitespace}[1]{%
+ \renewcommand{\epcqrcode at EscapeWhitespaceResult}{\empty}%
+ \setcounter{epcqrcode at c}{1}%
+ \epcqrcode at EscapeWhitespaceIter{#1}%
+}%
+
+\newcommand{\epcqrcode at EscapeWhitespaceIter}[1]{%
+ \StrChar{#1}{\theepcqrcode at c}[\epcqrcode at tmp]%
+ \ifx\epcqrcode at tmp\empty%
+ \relax%
+ \else%
+ \IfStrEq{\epcqrcode at tmp}{ }{%
+ \edef\epcqrcode at EscapeWhitespaceResult{\epcqrcode at EscapeWhitespaceResult\ }%
+ }{%
+ \edef\epcqrcode at EscapeWhitespaceResult{\epcqrcode at EscapeWhitespaceResult\epcqrcode at tmp}%
+ }%
+ \stepcounter{epcqrcode at c}%
+ \epcqrcode at EscapeWhitespaceIter{#1}%
+ \fi%
+}%
+
+\newcounter{epcqrcode at OverallLength}%
+\newcommand{\epcqrcode at OverallSize}{%
+ \setcounter{epcqrcode at OverallLength}{22}%
+ \ifx\epcqr at bic\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqrcode at CleanedBic}[\epcqrcode at BicLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at BicLength}%
+ \fi%
+ \StrLen{\epcqrcode at EscapedName}[\epcqrcode at NameLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at NameLength}%
+ \StrLen{\epcqrcode at CleanedIban}[\epcqrcode at IbanLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at IbanLength}%
+ \ifreasonx\epcqr at amount\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqr at amount}[\epcqrcode at AmountLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at AmountLength}%
+ \addtocounter{epcqrcode at OverallLength}{3}%
+ \fi%
+ \ifx\epcqr at reason\empty%
+ \relax%
+ \else%
+ \StrLen{\ecpqr at reason}[\epcqrcode at ReasonLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at ReasonLength}%
+ \fi%
+ \ifx\epcqr at ref\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqr at ref}[\epcqrcode at RefLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at RefLength}%
+ \fi%
+ \ifx\epcqr at text\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqrcode at EscapedText}[\epcqrcode at TextLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at TextLength}%
+ \fi%
+ \ifx\epcqr at information\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqrcode at EscapedInformation}[\epcqrcode at InformationLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at InformationLength}%
+ \fi%
+ \ifnum\theepcqrcode at OverallLength>331%
+ \epcqrcode at panic{Overall payload too big}%
+ \fi%
+}%
+
+\newcounter{epcqrcode at z}%
+\NewDocumentCommand\epcqr{m}{%
+ \begingroup%
+ \SetKeys[epcqr]{#1}%
+
+ \ifx\epcqr at name\@empty\epcqrcode at panic{No name provided}\fi%
+ \epcqrcode at CheckNameLength{\epcqr at name}%
+ \epcqrcode at EscapeWhitespace{\epcqr at name}%
+ \edef\epcqrcode at EscapedName{\epcqrcode at EscapeWhitespaceResult}%
+
+ \ifx\epcqr at iban\@empty\epcqrcode at panic{No iban provided}\fi%
+ \StrDel[0]{\epcqr at iban}{ }[\epcqrcode at CleanedIban]%
+ \epcqrcode at CheckIban{\epcqrcode at CleanedIban}%
+
+ \ifx\epcqr at amount\@empty%
+ \relax%
+ \else%
+ \epcqrcode at CheckAmount{\epcqr at amount}%
+ \fi%
+
+ \ifx\epcqr at ref\@empty%
+ \relax%
+ \else%
+ \ifx\epcqr at text\@empty%
+ \StrDel[0]{\epcqr at ref}{ }[\epcqrcode at CleanedRef]%
+ \epcqrcode at CheckCreditorReference{\epcqrcode at CleanedRef}%
+ \else%
+ \epcqrcode at panic{Either ref or text}%
+ \fi%
+ \fi%
+
+ \ifx\epcqr at text\@empty%
+ \relax%
+ \else%
+ \epcqrcode at EscapeWhitespace{\epcqr at text}%
+ \edef\epcqrcode at EscapedText{\epcqrcode at EscapeWhitespaceResult}%
+ \fi%
+
+ \epcqrcode at CheckTextLength{\epcqr at text}%
+ \ifx\epcqr at bic\@empty%
+ \relax%
+ \else%
+ \StrDel[0]{\epcqr at bic}{ }[\epcqrcode at CleanedBic]%
+ \epcqrcode at CheckBIC{\epcqrcode at CleanedBic}%
+ \fi%
+
+ \ifx\epcqr at reason\@empty\else\epcqrcode at CheckReason{\epcqr at reason}\fi%
+
+ \ifx\epcqr at information\empty%
+ \relax%
+ \else%
+ \epcqrcode at EscapeWhitespace{\epcqr at information}%
+ \edef\epcqrcode at EscapedInformation{\epcqrcode at EscapeWhitespaceResult}%
+ \StrLen{\epcqrcode at EscapedInformation}[\epcqrcode at InfLength]%
+ \ifnum\epcqrcode at InfLength>70%
+ \PackageWarning{epcqr}{Information possibly too long}%
+ \fi%
+ \fi%
+
+ \epcqrcode at OverallSize%
+
+ \setcounter{epcqrcode at z}{5}%
+ \ifx\epcqr at information\empty%
+ \setcounter{epcqrcode at z}{4}%
+ \ifx\epcqr at text\empty%
+ \setcounter{epcqrcode at z}{3}%
+ \ifx\epcqr at ref\empty%
+ \setcounter{epcqrcode at z}{2}%
+ \ifx\epcqr at reason\empty%
+ \setcounter{epcqrcode at z}{1}%
+ \ifx\epcqr at amount\empty%
+ \setcounter{epcqrcode at z}{0}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+
+ \qrcode[level=M, nolinks]{%
+ BCD\?%
+ 002\?%
+ \ifx\epcqr at charset\@empty 1\?\else\epcqr at charset\?\fi%
+ SCT\?%
+ \ifx\epcqr at bic\@empty\?\else\epcqrcode at CleanedBic\?\fi%
+ \epcqrcode at EscapedName\?%
+ \epcqrcode at CleanedIban%
+ \ifnum\theepcqrcode at z>0\?\fi%
+ \ifx\epcqr at amount\@empty\else EUR\epcqr at amount\fi%
+ \ifnum\theepcqrcode at z>1\?\fi%
+ \ifx\epcqr at reason\@empty\else\epcqr at reason\fi%
+ \ifnum\theepcqrcode at z>2\?\fi%
+ \ifx\epcqr at ref\@empty\else\epcqrcode at CleanedRef\fi%
+ \ifnum\theepcqrcode at z>3\?\fi%
+ \ifx\epcqr at text\@empty\else\epcqrcode at EscapedText\fi%
+ \ifnum\theepcqrcode at z>4\?\fi%
+ \ifx\epcqr at information\@empty\else\epcqrcode at EscapedInformation\fi%
+ }%
+ \endgroup%
+}%
+\makeatother%
+% \Finale
+\endinput
Property changes on: trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.ins (rev 0)
+++ trunk/Master/texmf-dist/source/latex/epcqrcode/epcqrcode.ins 2024-04-11 19:55:15 UTC (rev 70916)
@@ -0,0 +1,51 @@
+%%
+%% Copyright (C) 2024 by David Wedekind, Paul Kantiem, Dr. rer. nat. Wolf Müller (epc-qr-code at proton.me)
+%%
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008-05-04 or later.
+%%
+\input docstrip.tex
+\keepsilent
+\usedir{tex/latex/epcqrcode}
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2024 by David Wedekind, Paul Kantiem, Dr. rer. nat. Wolf Müller (epc-qr-code at proton.me)
+This file may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either
+version 1.3 of this license or (at your option) any later
+version. The latest version of this license is in:
+
+http://www.latex-project.org/lppl.txt
+
+and version 1.3c or later is part of all distributions of
+LaTeX version 2008-05-04 or later.
+
+\endpreamble
+
+\generate{\file{epcqrcode.sty}{\from{epcqrcode.dtx}{package}}}
+
+\obeyspaces
+\Msg{****************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the *}
+\Msg{* following file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* epcqrcode.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* epcqrcode.dtx through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{****************************************************}
+
+\endbatchfile
Added: trunk/Master/texmf-dist/tex/latex/epcqrcode/epcqrcode.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/epcqrcode/epcqrcode.sty (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/epcqrcode/epcqrcode.sty 2024-04-11 19:55:15 UTC (rev 70916)
@@ -0,0 +1,574 @@
+%%
+%% This is file `epcqrcode.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% epcqrcode.dtx (with options: `package')
+%%
+%% This is a generated file.
+%%
+%% Copyright (C) 2024 by David Wedekind, Paul Kantiem, Dr. rer. nat. Wolf Müller (epc-qr-code at proton.me)
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version. The latest version of this license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3c or later is part of all distributions of
+%% LaTeX version 2008-05-04 or later.
+%%
+\NeedsTeXFormat{LaTeX2e}[2022-06-01]%
+\ProvidesPackage{epcqrcode}[2024-02-07 v1.0 dtx epcqrcode file]%
+\RequirePackage{qrcode}%
+\RequirePackage{xstring}%
+\RequirePackage{calculator}%
+
+\newcommand{\epcqrcode at panic}[1]{\PackageError{epcqr}{#1}{Get some help...}}%
+
+\makeatletter%
+\DeclareKeys[epcqr]{%
+charset .store = \epcqr at charset,%
+bic .store = \epcqr at bic,%
+name .store = \epcqr at name,%
+iban .store = \epcqr at iban,%
+amount .store = \epcqr at amount,%
+reason .store = \epcqr at reason,%
+ref .store = \epcqr at ref,%
+text .store = \epcqr at text,%
+information .store = \epcqr at information%
+}%
+
+\newcounter{epcqrcode at IsBiggerIndex}%
+\newcommand{\epcqrcode at IsBiggerResult}{\empty}%
+\newcommand{\epcqrcode at IsBiggerIter}[2]{%
+ \StrChar{#1}{\value{epcqrcode at IsBiggerIndex}}[\epcqrcode at Firstepcqrcode@Current]%
+ \StrChar{#2}{\value{epcqrcode at IsBiggerIndex}}[\epcqrcode at Secondepcqrcode@Current]%
+ \ifx\epcqrcode at Firstepcqrcode@Current\empty%
+ \renewcommand{\epcqrcode at IsBiggerResult}{equal}%
+ \else%
+ \ifnum\epcqrcode at Firstepcqrcode@Current>\epcqrcode at Secondepcqrcode@Current%
+ \renewcommand{\epcqrcode at IsBiggerResult}{true}%
+ \else
+ \ifnum\epcqrcode at Firstepcqrcode@Current<\epcqrcode at Secondepcqrcode@Current%
+ \renewcommand{\epcqrcode at IsBiggerResult}{false}%
+ \else%
+ \stepcounter{epcqrcode at IsBiggerIndex}%
+ \epcqrcode at IsBiggerIter{#1}{#2}%
+ \fi%
+ \fi%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at IsBigger}[2]{%
+ \renewcommand{\epcqrcode at IsBiggerResult}{\empty}%
+ \StrLen{#1}[\epcqrcode at FirstLength]%
+ \StrLen{#2}[\epcqrcode at SecondLength]%
+ \ifnum\epcqrcode at FirstLength>\epcqrcode at SecondLength%
+ \renewcommand{\epcqrcode at IsBiggerResult}{true}%
+ \else%
+ \ifnum\epcqrcode at FirstLength<\epcqrcode at SecondLength%
+ \renewcommand{\epcqrcode at IsBiggerResult}{false}%
+ \else%
+ \renewcommand{\epcqrcode at IsBiggerResult}{\empty}%
+ \setcounter{epcqrcode at IsBiggerIndex}{1}%
+ \epcqrcode at IsBiggerIter{#1}{#2}%
+ \fi%
+ \fi%
+}%
+
+\newcounter{epcqrcode at ModuloIndex}%
+\newcommand{\epcqrcode at Current}{\empty}%
+\newcommand{\epcqrcode at NextNumberIter}{%
+ \stepcounter{epcqrcode at ModuloIndex}%
+ \StrChar{\epcqrcode at Dividend}{\value{epcqrcode at ModuloIndex}}[\epcqrcode at tmp]%
+ \ifx\epcqrcode at tmp\empty%
+ \relax%
+ \else%
+ \edef\epcqrcode at Current{\epcqrcode at Current\epcqrcode at tmp}%
+ \epcqrcode at IsBigger{\epcqrcode at Current}{\epcqrcode at Divisor}%
+ \IfStrEq{\epcqrcode at IsBiggerResult}{true}{}{%
+ \epcqrcode at NextNumberIter%
+ }%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at Dividend}{\empty}%
+\newcommand{\epcqrcode at Divisor}{\empty}%
+\newcommand{\epcqrcode at ModuloIter}{%
+ \StrLen{\epcqrcode at Dividend}[\epcqrcode at DividendLength]%
+ \ifnum\epcqrcode at DividendLength=\theepcqrcode at ModuloIndex%
+ \renewcommand{\epcqrcode at ModuloResult}{\epcqrcode at Current}%
+ \else%
+ \epcqrcode at NextNumberIter%
+ \epcqrcode at IsBigger{\epcqrcode at Divisor}{\epcqrcode at Current}%
+ \IfStrEq{\epcqrcode at IsBiggerResult}{true}{\renewcommand{\epcqrcode at ModuloResult}{\epcqrcode at Current}}{%
+ \INTEGERQUOTIENT{\epcqrcode at Current}{\epcqrcode at Divisor}{\epcqrcode at tmp}%
+ \MULTIPLY{\epcqrcode at Divisor}{\epcqrcode at tmp}{\epcqrcode at tmp}%
+ \SUBTRACT{\epcqrcode at Current}{\epcqrcode at tmp}{\epcqrcode at Current}%
+ \epcqrcode at ModuloIter%
+ }%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at ModuloResult}{\empty}%
+\newcommand{\epcqrcode at Modulo}[2]{%
+ \renewcommand{\epcqrcode at Current}{\empty}%
+ \renewcommand{\epcqrcode at Dividend}{#1}%
+ \renewcommand{\epcqrcode at Divisor}{#2}%
+ \epcqrcode at IsBigger{\epcqrcode at Divisor}{\epcqrcode at Dividend}%
+ \IfStrEq{\epcqrcode at IsBiggerResult}{true}{\renewcommand{\epcqrcode at ModuloResult}{\epcqrcode at Dividend}}{%
+ \IfStrEq{\epcqrcode at IsBiggerResult}{equal}{\renewcommand{\epcqrcode at ModuloResult}{0}}{%
+ \setcounter{epcqrcode at ModuloIndex}{0}%
+ \epcqrcode at ModuloIter%
+ }%
+ }%
+}%
+
+\newcommand{\epcqrcode at CheckCountryCode}[1]{%
+ \IfSubStr{,RU,LC,MT,SC,JO,KW,MU,EG,BR,QA,PS,UA,AL,AZ,BY,BJ,CI,DO,SV,GT,LB,ML,NI,PL,SN,HU,CY,BF,BI,FR,GA,GR,IT,CM,CG,MG,MR,MC,SM,CF,IR,IS,TR,AO,CV,LY,MZ,PT,ST,DZ,AD,VG,MD,PK,RO,SA,SE,SK,ES,CZ,TN,GI,IQ,IL,TL,AE,BH,BG,CR,DE,GE,IE,ME,RS,VA,GB,HR,LV,LI,CH,BA,EE,KZ,XK,LT,LU,MN,AT,MK,SI,DK,FO,FI,GL,NL,SD,BE,NO,}{,#1,}{}{\epcqrcode at panic{Wrong Country Code}}%
+}%
+
+\newcommand{\epcqrcode at CheckIbanLength}[2]{%
+ \IfStrEq{#1}{RU}{\ifnum 33=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LC}{\ifnum 32=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MT}{\ifnum 31=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SC}{\ifnum 31=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{JO}{\ifnum 30=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{KW}{\ifnum 30=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MU}{\ifnum 30=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{EG}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BR}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{QA}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{PS}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{UA}{\ifnum 29=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AL}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AZ}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BY}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BJ}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CI}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{DO}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SV}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GT}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LB}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{ML}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{NI}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{PL}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SN}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{HU}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CY}{\ifnum 28=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BF}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BI}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{FR}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GA}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GR}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IT}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CM}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CG}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MG}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MR}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MC}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SM}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CF}{\ifnum 27=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IR}{\ifnum 26=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IS}{\ifnum 26=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{TR}{\ifnum 26=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AO}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CV}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LY}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MZ}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{PT}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{ST}{\ifnum 25=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{DZ}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AD}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{VG}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MD}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{PK}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{RO}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SA}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SE}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SK}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{ES}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CZ}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{TN}{\ifnum 24=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GI}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IQ}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IL}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{TL}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AE}{\ifnum 23=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BH}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BG}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CR}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{DE}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GE}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{IE}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{ME}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{RS}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{VA}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GB}{\ifnum 22=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{HR}{\ifnum 21=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LV}{\ifnum 21=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LI}{\ifnum 21=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{CH}{\ifnum 21=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BA}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{EE}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{KZ}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{XK}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LT}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{LU}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MN}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{AT}{\ifnum 20=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{MK}{\ifnum 19=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SI}{\ifnum 19=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{DK}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{FO}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{FI}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{GL}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{NL}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{SD}{\ifnum 18=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{BE}{\ifnum 16=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+ \IfStrEq{#1}{NO}{\ifnum 15=#2\relax\else\epcqrcode at panic{Wrong Iban length for #1}\fi}{}%
+}%
+
+\newcommand{\epcqrcode at TranslateLetterResult}{\empty}%
+\newcommand{\epcqrcode at TranslateLetter}[1]{%
+ \renewcommand{\epcqrcode at TranslateLetterResult}{\empty}%
+ \IfStrEq{#1}{0}{\renewcommand{\epcqrcode at TranslateLetterResult}{0}}{}%
+ \IfStrEq{#1}{1}{\renewcommand{\epcqrcode at TranslateLetterResult}{1}}{}%
+ \IfStrEq{#1}{2}{\renewcommand{\epcqrcode at TranslateLetterResult}{2}}{}%
+ \IfStrEq{#1}{3}{\renewcommand{\epcqrcode at TranslateLetterResult}{3}}{}%
+ \IfStrEq{#1}{4}{\renewcommand{\epcqrcode at TranslateLetterResult}{4}}{}%
+ \IfStrEq{#1}{5}{\renewcommand{\epcqrcode at TranslateLetterResult}{5}}{}%
+ \IfStrEq{#1}{6}{\renewcommand{\epcqrcode at TranslateLetterResult}{6}}{}%
+ \IfStrEq{#1}{7}{\renewcommand{\epcqrcode at TranslateLetterResult}{7}}{}%
+ \IfStrEq{#1}{8}{\renewcommand{\epcqrcode at TranslateLetterResult}{8}}{}%
+ \IfStrEq{#1}{9}{\renewcommand{\epcqrcode at TranslateLetterResult}{9}}{}%
+ \IfStrEq{#1}{A}{\renewcommand{\epcqrcode at TranslateLetterResult}{10}}{}%
+ \IfStrEq{#1}{B}{\renewcommand{\epcqrcode at TranslateLetterResult}{11}}{}%
+ \IfStrEq{#1}{C}{\renewcommand{\epcqrcode at TranslateLetterResult}{12}}{}%
+ \IfStrEq{#1}{D}{\renewcommand{\epcqrcode at TranslateLetterResult}{13}}{}%
+ \IfStrEq{#1}{E}{\renewcommand{\epcqrcode at TranslateLetterResult}{14}}{}%
+ \IfStrEq{#1}{F}{\renewcommand{\epcqrcode at TranslateLetterResult}{15}}{}%
+ \IfStrEq{#1}{G}{\renewcommand{\epcqrcode at TranslateLetterResult}{16}}{}%
+ \IfStrEq{#1}{H}{\renewcommand{\epcqrcode at TranslateLetterResult}{17}}{}%
+ \IfStrEq{#1}{I}{\renewcommand{\epcqrcode at TranslateLetterResult}{18}}{}%
+ \IfStrEq{#1}{J}{\renewcommand{\epcqrcode at TranslateLetterResult}{19}}{}%
+ \IfStrEq{#1}{K}{\renewcommand{\epcqrcode at TranslateLetterResult}{20}}{}%
+ \IfStrEq{#1}{L}{\renewcommand{\epcqrcode at TranslateLetterResult}{21}}{}%
+ \IfStrEq{#1}{M}{\renewcommand{\epcqrcode at TranslateLetterResult}{22}}{}%
+ \IfStrEq{#1}{N}{\renewcommand{\epcqrcode at TranslateLetterResult}{23}}{}%
+ \IfStrEq{#1}{O}{\renewcommand{\epcqrcode at TranslateLetterResult}{24}}{}%
+ \IfStrEq{#1}{P}{\renewcommand{\epcqrcode at TranslateLetterResult}{25}}{}%
+ \IfStrEq{#1}{Q}{\renewcommand{\epcqrcode at TranslateLetterResult}{26}}{}%
+ \IfStrEq{#1}{R}{\renewcommand{\epcqrcode at TranslateLetterResult}{27}}{}%
+ \IfStrEq{#1}{S}{\renewcommand{\epcqrcode at TranslateLetterResult}{28}}{}%
+ \IfStrEq{#1}{T}{\renewcommand{\epcqrcode at TranslateLetterResult}{29}}{}%
+ \IfStrEq{#1}{U}{\renewcommand{\epcqrcode at TranslateLetterResult}{30}}{}%
+ \IfStrEq{#1}{V}{\renewcommand{\epcqrcode at TranslateLetterResult}{31}}{}%
+ \IfStrEq{#1}{W}{\renewcommand{\epcqrcode at TranslateLetterResult}{32}}{}%
+ \IfStrEq{#1}{X}{\renewcommand{\epcqrcode at TranslateLetterResult}{33}}{}%
+ \IfStrEq{#1}{Y}{\renewcommand{\epcqrcode at TranslateLetterResult}{34}}{}%
+ \IfStrEq{#1}{Z}{\renewcommand{\epcqrcode at TranslateLetterResult}{35}}{}%
+}%
+
+\newcounter{epcqrcode at c}%
+\newcommand{\epcqrcode at TranslateLettersResult}{\empty}%
+\newcommand{\epcqrcode at TranslateLetters}[1]{%
+ \renewcommand{\epcqrcode at TranslateLettersResult}{\empty}%
+ \setcounter{epcqrcode at c}{1}%
+ \epcqrcode at TranslateLettersIter{#1}%
+}%
+
+\newcommand{\epcqrcode at TranslateLettersIter}[1]{%
+ \StrChar{#1}{\theepcqrcode at c}[\epcqrcode at tmp]%
+ \ifx\epcqrcode at tmp\empty%
+ \relax%
+ \else%
+ \epcqrcode at TranslateLetter{\epcqrcode at tmp}%
+ \edef\epcqrcode at current{\epcqrcode at TranslateLetterResult}%
+ \edef\epcqrcode at TranslateLettersResult{\epcqrcode at TranslateLettersResult\epcqrcode at current}%
+ \stepcounter{epcqrcode at c}%
+ \epcqrcode at TranslateLettersIter{#1}%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at CheckIban}[1]{%
+ \StrLen{#1}[\epcqrcode at IbanLength]%
+ \StrLeft{#1}{4}[\epcqrcode at CountryPlusCheck]%
+ \StrRight{\epcqrcode at CountryPlusCheck}{2}[\epcqrcode at Check]%
+ \StrGobbleRight{\epcqrcode at CountryPlusCheck}{2}[\epcqrcode at Country]%
+ \epcqrcode at CheckCountryCode{\epcqrcode at Country}%
+ \epcqrcode at CheckIbanLength{\epcqrcode at Country}{\epcqrcode at IbanLength}%
+ \StrGobbleLeft{#1}{4}[\epcqrcode at Iban]%
+ \epcqrcode at TranslateLetters{\epcqrcode at Iban\epcqrcode at CountryPlusCheck}%
+ \edef\epcqrcode at TranslatedIban{\epcqrcode at TranslateLettersResult}%
+ \epcqrcode at Modulo{\epcqrcode at TranslatedIban}{97}%
+ \ifnum\epcqrcode at ModuloResult=1%
+ \relax%
+ \else%
+ \epcqrcode at panic{Iban check failed}%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at CheckCreditorReference}[1]{%
+ \StrLen{#1}[\epcqrcode at CreditorReferenceLength]%
+ \ifnum\epcqrcode at CreditorReferenceLength>25%
+ \epcqrcode at panic{Creditor reference too long}%
+ \else%
+ \ifnum\epcqrcode at CreditorReferenceLength<5%
+ \epcqrcode at panic{Creditor reference too short}%
+ \fi%
+ \fi%
+ \StrLeft{#1}{4}[\epcqrcode at IdentifierPlusCheck]%
+ \StrGobbleLeft{#1}{4}[\epcqrcode at Reference]%
+ \epcqrcode at TranslateLetters{\epcqrcode at Reference\epcqrcode at IdentifierPlusCheck}%
+ \edef\epcqrcode at TranslatedCreditorReference{\epcqrcode at TranslateLettersResult}%
+ \epcqrcode at Modulo{\epcqrcode at TranslatedCreditorReference}{97}%
+ \ifnum\epcqrcode at ModuloResult=1%
+ \relax%
+ \else%
+ \epcqrcode at panic{Creditor reference check failed}%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at CheckBIC}[1]{%
+ \StrLen{#1}[\epcqrcode at length]%
+ \ifnum8=\epcqrcode at length%
+ \relax%
+ \else%
+ \ifnum11=\epcqrcode at length%
+ \relax%
+ \else%
+ \epcqrcode at panic{Wrong BIC length}%
+ \fi%
+ \fi%
+ \StrChar{#1}{5}[\epcqrcode at FirstCountry]%
+ \StrChar{#1}{6}[\epcqrcode at SecondCountry]%
+ \epcqrcode at CheckCountryCode{\epcqrcode at FirstCountry\epcqrcode at SecondCountry}%
+}%
+
+\newcommand{\epcqrcode at CheckTextLength}[1]{%
+ \StrLen{#1}[\epcqrcode at length]%
+ \ifnum\epcqrcode at length<141\relax\else\PackageWarning{epcqr}{Text possibly too long}\fi%
+}%
+
+\newcommand{\epcqrcode at CheckNameLength}[1]{%
+ \StrLen{#1}[\epcqrcode at length]%
+ \ifnum\epcqrcode at length<71\relax\else\PackageWarning{epcqr}{Name possibly too long}\fi%
+}%
+
+\newcommand{\epcqrcode at CheckReason}[1]{%
+ \IfSubStr{,BENE,BONU,CBFF,CHAR,GOVT,PENS,SALA,SSBE,CBLK,CDCB,CDCD,CDCS,CDOC,CDQC,ETUP,FCOL,MTUP,ACCT,CASH,COLL,CSDB,DEPT,INTC,LIMA,NETT,AGRT,AREN,BEXP,BOCE,COMC,CPYR,GDDS,GDSV,GSCB,LICF,POPE,ROYA,SCVE,SUBS,SUPP,TRAD,COMT,CLPR,DBTC,GOVI,HLRP,INPC,INSU,INTE,LBRI,LIFI,LOAN,LOAR,PENO,PPTI,RINP,TRFD,ADMG,ADVA,BLDM,CCRD,CDBL,CFEE,COST,DCRD,FAND,ICCP,IDCP,IHRP,INSM,MSVC,NOWS,OFEE,OTHR,PADD,PTSP,RCKE,RCPT,REFU,RENT,STDY,TELI,WEBI,ANNI,CAFI,CFDI,CMDT,DERI,DIVD,FREX,HEDG,PRME,SAVG,SECU,SEPI,TREA,ANTS,CVCF,DMEQ,DNTS,HLTC,HLTI,HSPC,ICRF,LTCF,MDCS,VIEW,ALMY,AEMP,BECH,COMM,CSLP,GFRP,GVEA,GVEB,GVEC,GVED,GWLT,EPAY,PAYR,PRCP,RHBS,ESTX,HSTX,INTX,NITX,TAXS,VATX,WHLD,TAXR,AIRB,BUSB,FERB,RLWY,CBTV,ELEC,ENRG,GASB,NWCH,NWCM,OTLC,PHON,WTER,}{,#1,}{}{\epcqrcode at panic{Wrong reason}}%
+}%
+
+\newcommand{\epcqrcode at CheckIfNumber}[1]{%
+ \IfSubStr{,0,1,2,3,4,5,6,7,8,9,}{,#1,}{\relax}{\epcqrcode at panic{Amount has wrong format (not a number)}}%
+}%
+
+\newcommand{\epcqrcode at IterateAmount}[1]{%
+ \StrChar{#1}{\theepcqrcode at c}[\epcqrcode at tmp]%
+ \ifx\epcqrcode at tmp\empty%
+ \relax%
+ \else%
+ \epcqrcode at CheckIfNumber{\epcqrcode at tmp}%
+ \stepcounter{epcqrcode at c}%
+ \epcqrcode at IterateAmount{#1}%
+ \fi%
+}%
+
+\newcommand{\epcqrcode at CheckAmount}[1]{%
+ \edef\epcqrcode at Amount{#1}%
+ \IfSubStr[1]{\epcqrcode at Amount}{.}{%
+ \StrRight{#1}{2}[\epcqrcode at LastTwoChars]%
+ \StrChar{\epcqrcode at LastTwoChars}{1}[\epcqrcode at PotentialDot]%
+ \IfStrEq{\epcqrcode at PotentialDot}{.}{\edef\epcqrcode at Amount{\epcqrcode at Amount0}}{\relax}%
+ }{%
+ \edef\epcqrcode at Amount{\epcqrcode at Amount.00}%
+ }%
+ \StrLen{\epcqrcode at Amount}[\epcqrcode at AmountLength]%
+ \ifnum\epcqrcode at AmountLength>12\epcqrcode at panic{Amount too big}\fi%
+ \ifnum\epcqrcode at AmountLength<4\epcqrcode at panic{Amount too small}\fi%
+ \StrRight{\epcqrcode at Amount}{3}[\epcqrcode at LastThreeChars]%
+ \StrChar{\epcqrcode at LastThreeChars}{1}[\epcqrcode at PotentialDot]%
+ \IfStrEq{\epcqrcode at PotentialDot}{.}{}{\epcqrcode at panic{Amount has wrong format}}%
+ \StrDel[1]{\epcqrcode at Amount}{.}[\epcqrcode at AmountWithoutDot]%
+ \setcounter{epcqrcode at c}{1}%
+ \epcqrcode at IterateAmount{\epcqrcode at AmountWithoutDot}%
+ \ifnum\epcqrcode at AmountLength=4\IfStrEq{\epcqrcode at Amount}{0.00}{\epcqrcode at panic{Amount too small}}{\relax}\fi%
+}%
+
+\newcommand{\epcqrcode at EscapeWhitespaceResult}{\empty}%
+\newcommand{\epcqrcode at EscapeWhitespace}[1]{%
+ \renewcommand{\epcqrcode at EscapeWhitespaceResult}{\empty}%
+ \setcounter{epcqrcode at c}{1}%
+ \epcqrcode at EscapeWhitespaceIter{#1}%
+}%
+
+\newcommand{\epcqrcode at EscapeWhitespaceIter}[1]{%
+ \StrChar{#1}{\theepcqrcode at c}[\epcqrcode at tmp]%
+ \ifx\epcqrcode at tmp\empty%
+ \relax%
+ \else%
+ \IfStrEq{\epcqrcode at tmp}{ }{%
+ \edef\epcqrcode at EscapeWhitespaceResult{\epcqrcode at EscapeWhitespaceResult\ }%
+ }{%
+ \edef\epcqrcode at EscapeWhitespaceResult{\epcqrcode at EscapeWhitespaceResult\epcqrcode at tmp}%
+ }%
+ \stepcounter{epcqrcode at c}%
+ \epcqrcode at EscapeWhitespaceIter{#1}%
+ \fi%
+}%
+
+\newcounter{epcqrcode at OverallLength}%
+\newcommand{\epcqrcode at OverallSize}{%
+ \setcounter{epcqrcode at OverallLength}{22}%
+ \ifx\epcqr at bic\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqrcode at CleanedBic}[\epcqrcode at BicLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at BicLength}%
+ \fi%
+ \StrLen{\epcqrcode at EscapedName}[\epcqrcode at NameLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at NameLength}%
+ \StrLen{\epcqrcode at CleanedIban}[\epcqrcode at IbanLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at IbanLength}%
+ \ifreasonx\epcqr at amount\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqr at amount}[\epcqrcode at AmountLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at AmountLength}%
+ \addtocounter{epcqrcode at OverallLength}{3}%
+ \fi%
+ \ifx\epcqr at reason\empty%
+ \relax%
+ \else%
+ \StrLen{\ecpqr at reason}[\epcqrcode at ReasonLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at ReasonLength}%
+ \fi%
+ \ifx\epcqr at ref\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqr at ref}[\epcqrcode at RefLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at RefLength}%
+ \fi%
+ \ifx\epcqr at text\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqrcode at EscapedText}[\epcqrcode at TextLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at TextLength}%
+ \fi%
+ \ifx\epcqr at information\empty%
+ \relax%
+ \else%
+ \StrLen{\epcqrcode at EscapedInformation}[\epcqrcode at InformationLength]%
+ \addtocounter{epcqrcode at OverallLength}{\epcqrcode at InformationLength}%
+ \fi%
+ \ifnum\theepcqrcode at OverallLength>331%
+ \epcqrcode at panic{Overall payload too big}%
+ \fi%
+}%
+
+\newcounter{epcqrcode at z}%
+\NewDocumentCommand\epcqr{m}{%
+ \begingroup%
+ \SetKeys[epcqr]{#1}%
+
+ \ifx\epcqr at name\@empty\epcqrcode at panic{No name provided}\fi%
+ \epcqrcode at CheckNameLength{\epcqr at name}%
+ \epcqrcode at EscapeWhitespace{\epcqr at name}%
+ \edef\epcqrcode at EscapedName{\epcqrcode at EscapeWhitespaceResult}%
+
+ \ifx\epcqr at iban\@empty\epcqrcode at panic{No iban provided}\fi%
+ \StrDel[0]{\epcqr at iban}{ }[\epcqrcode at CleanedIban]%
+ \epcqrcode at CheckIban{\epcqrcode at CleanedIban}%
+
+ \ifx\epcqr at amount\@empty%
+ \relax%
+ \else%
+ \epcqrcode at CheckAmount{\epcqr at amount}%
+ \fi%
+
+ \ifx\epcqr at ref\@empty%
+ \relax%
+ \else%
+ \ifx\epcqr at text\@empty%
+ \StrDel[0]{\epcqr at ref}{ }[\epcqrcode at CleanedRef]%
+ \epcqrcode at CheckCreditorReference{\epcqrcode at CleanedRef}%
+ \else%
+ \epcqrcode at panic{Either ref or text}%
+ \fi%
+ \fi%
+
+ \ifx\epcqr at text\@empty%
+ \relax%
+ \else%
+ \epcqrcode at EscapeWhitespace{\epcqr at text}%
+ \edef\epcqrcode at EscapedText{\epcqrcode at EscapeWhitespaceResult}%
+ \fi%
+
+ \epcqrcode at CheckTextLength{\epcqr at text}%
+ \ifx\epcqr at bic\@empty%
+ \relax%
+ \else%
+ \StrDel[0]{\epcqr at bic}{ }[\epcqrcode at CleanedBic]%
+ \epcqrcode at CheckBIC{\epcqrcode at CleanedBic}%
+ \fi%
+
+ \ifx\epcqr at reason\@empty\else\epcqrcode at CheckReason{\epcqr at reason}\fi%
+
+ \ifx\epcqr at information\empty%
+ \relax%
+ \else%
+ \epcqrcode at EscapeWhitespace{\epcqr at information}%
+ \edef\epcqrcode at EscapedInformation{\epcqrcode at EscapeWhitespaceResult}%
+ \StrLen{\epcqrcode at EscapedInformation}[\epcqrcode at InfLength]%
+ \ifnum\epcqrcode at InfLength>70%
+ \PackageWarning{epcqr}{Information possibly too long}%
+ \fi%
+ \fi%
+
+ \epcqrcode at OverallSize%
+
+ \setcounter{epcqrcode at z}{5}%
+ \ifx\epcqr at information\empty%
+ \setcounter{epcqrcode at z}{4}%
+ \ifx\epcqr at text\empty%
+ \setcounter{epcqrcode at z}{3}%
+ \ifx\epcqr at ref\empty%
+ \setcounter{epcqrcode at z}{2}%
+ \ifx\epcqr at reason\empty%
+ \setcounter{epcqrcode at z}{1}%
+ \ifx\epcqr at amount\empty%
+ \setcounter{epcqrcode at z}{0}%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+
+ \qrcode[level=M, nolinks]{%
+ BCD\?%
+ 002\?%
+ \ifx\epcqr at charset\@empty 1\?\else\epcqr at charset\?\fi%
+ SCT\?%
+ \ifx\epcqr at bic\@empty\?\else\epcqrcode at CleanedBic\?\fi%
+ \epcqrcode at EscapedName\?%
+ \epcqrcode at CleanedIban%
+ \ifnum\theepcqrcode at z>0\?\fi%
+ \ifx\epcqr at amount\@empty\else EUR\epcqr at amount\fi%
+ \ifnum\theepcqrcode at z>1\?\fi%
+ \ifx\epcqr at reason\@empty\else\epcqr at reason\fi%
+ \ifnum\theepcqrcode at z>2\?\fi%
+ \ifx\epcqr at ref\@empty\else\epcqrcode at CleanedRef\fi%
+ \ifnum\theepcqrcode at z>3\?\fi%
+ \ifx\epcqr at text\@empty\else\epcqrcode at EscapedText\fi%
+ \ifnum\theepcqrcode at z>4\?\fi%
+ \ifx\epcqr at information\@empty\else\epcqrcode at EscapedInformation\fi%
+ }%
+ \endgroup%
+}%
+\makeatother%
+\endinput
+%%
+%% End of file `epcqrcode.sty'.
Property changes on: trunk/Master/texmf-dist/tex/latex/epcqrcode/epcqrcode.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check 2024-04-11 19:54:38 UTC (rev 70915)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check 2024-04-11 19:55:15 UTC (rev 70916)
@@ -301,7 +301,7 @@
endnotes endnotes-hy endnotesj endofproofwd
engpron engrec engtlc enigma enotez
enumitem enumitem-zref envbig environ envlab eolang
- epigrafica epigram epigraph epigraph-keys epiolmec eplain
+ epcqrcode epigrafica epigram epigraph epigraph-keys epiolmec eplain
epsdice epsf epsf-dvipdfmx epsincl epslatex-fr
epspdfconversion epstopdf epstopdf-pkg
eq-pin2corr eqell eqexpl eqlist
Modified: trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc 2024-04-11 19:54:38 UTC (rev 70915)
+++ trunk/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc 2024-04-11 19:55:15 UTC (rev 70916)
@@ -449,6 +449,7 @@
depend envbig
depend environ
depend envlab
+depend epcqrcode
depend epigraph
depend epigraph-keys
depend epiolmec
Added: trunk/Master/tlpkg/tlpsrc/epcqrcode.tlpsrc
===================================================================
More information about the tex-live-commits
mailing list.