commit ef5b6bac0549d800ed5956303139b6d421fbbf27
parent 35b03e891fc636dc890ceb2b85e18d4b9509f795
Author: Florian Dold <florian@dold.me>
Date: Mon, 4 Nov 2024 11:12:31 +0100
util: handle BIC in Swiss QR code generation
Diffstat:
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/packages/taler-util/src/qr.ts b/packages/taler-util/src/qr.ts
@@ -37,13 +37,14 @@ function encodePaytoAsSwissQrBill(paytoUri: string): EncodeResult {
if (amountStr === undefined) {
return { type: "skip" };
}
- const iban = parsedPayto.targetPath;
- const countryCode = iban.slice(0, 2);
+ const targetPathParts = parsedPayto.targetPath.split("/");
+ const beneficiaryIban = targetPathParts[targetPathParts.length - 1];
+ const countryCode = beneficiaryIban.slice(0, 2);
const lines = [
"SPC", // QRType
"0200", // Version
"1", // Character set (1: UTF-8)
- iban, // Beneficiary IBAN
+ beneficiaryIban, // Beneficiary IBAN
// Group: Beneficiary
"S", // Address type (S: structured)
parsedPayto.params["receiver-name"], // Beneficiary name
@@ -99,11 +100,8 @@ function encodePaytoAsEpcQr(paytoUri: string): EncodeResult {
return { type: "skip" };
}
const amountStr = parsedPayto.params["amount"];
-
- const parts = parsedPayto.targetPath.split("/");
-
- const iban = parts[parts.length - 1];
-
+ const targetPathParts = parsedPayto.targetPath.split("/");
+ const beneficiaryIban = targetPathParts[targetPathParts.length - 1];
const amt =
amountStr !== undefined
? `${Amounts.currencyOf(amountStr)}${Amounts.stringifyValue(
@@ -111,7 +109,6 @@ function encodePaytoAsEpcQr(paytoUri: string): EncodeResult {
2,
)}`
: "";
-
const lines = [
"BCD", // service tag
"002", // version
@@ -119,12 +116,11 @@ function encodePaytoAsEpcQr(paytoUri: string): EncodeResult {
"SCT", // Identification
"", // optional BIC
parsedPayto.params["receiver-name"], // Beneficiary name
- iban, // Beneficiary IBAN
+ beneficiaryIban, // Beneficiary IBAN
amt, // Amount (optional)
"", // AT-44 Purpose
parsedPayto.params["message"], // AT-05 Unstructured remittance information
];
-
return {
type: "ok",
qrContent: lines.join("\n"),