Skip to content

Setting the IBAN ​

Every Raast QR needs a destination account. A Pakistani IBAN is 24 characters: the country code PK, two check digits, a four-letter bank code, and sixteen alphanumeric characters for the account.

Setting It Explicitly ​

php
RaastQr::iban('PK33ABCD0000000000000000')->amount('2500')->toPng();

Or on a builder you already have:

php
RaastQr::make()->iban($vendor->iban)->amount($order->total)->toPng();

Falling Back to Config ​

If you leave the IBAN off, the package uses config('raast-qr.iban'):

php
// .env
// RAAST_QR_IBAN=PK33ABCD0000000000000000

RaastQr::make()->amount('2500')->toPng();

This is the right setup when all money lands in one account. For a marketplace, leave the config value null so a missing IBAN fails loudly instead of quietly billing the wrong account.

Normalisation ​

Spaces and lowercase are fine. The package strips and uppercases before encoding:

php
RaastQr::iban('pk33 abcd 0000 0000 0000 0000')->toPayload();
// identical to PK33ABCD0000000000000000

You can normalise manually too:

php
RaastQr::normalizeIban('pk33 abcd 0000 0000 0000 0000');
// 'PK33ABCD0000000000000000'

Formatting for Display ​

Never show a user an unbroken 24-character string if you can help it:

php
RaastQr::formatIban('PK33ABCD0000000000000000');
// 'PK33 ABCD 0000 0000 0000 0000'

RaastQr::formatIban('PK33ABCD0000000000000000', '-');
// 'PK33-ABCD-0000-0000-0000-0000'

Display only

Never feed a formatted IBAN back into the payload. Use normalizeIban() for that, or just pass the original — the builder normalises for you.

Checking Validity ​

php
RaastQr::isValidIban('PK33ABCD0000000000000000');   // true
RaastQr::isValidIban('PK00ABCD0000000000000000');   // false — checksum
RaastQr::isValidIban('GB33ABCD0000000000000000');   // false — not Pakistani

This runs the full ISO 13616 mod-97 checksum, not just a pattern match, so a single mistyped digit is caught.

For form input, use the validation rule instead of calling this by hand.

Errors ​

Passing an IBAN that fails validation throws when you ask for output:

php
try {
    RaastQr::iban('PK00ABCD0000000000000000')->toPng();
} catch (RaastQrException $e) {
    $e->reason();   // 'INVALID_IBAN'
}

Made with ❤️ from Pakistan