iris_payment

Greek IRIS payment QR code generator for Flutter. Validate AFM (Greek VAT/Tax ID), generate IRIS-standard QR data, and render payment QR codes.

IRIS is Greece's instant payment system managed by DIAS Interbanking Systems. Since December 2025, all Greek businesses must accept IRIS payments.

Features

  • AFM Validation - Greek VAT number (AFM) checksum verification
  • Static QR - IRISTIN{AFM} format for physical store checkout
  • Dynamic QR - IRISCOM{UUID} format for e-commerce transactions
  • QR Parser - Parse scanned IRIS QR strings back to structured data
  • IrisQrCode Widget - Customizable QR code with colors and logo overlay
  • IrisPaymentCard Widget - Ready-to-use payment card with business name
  • Cross-platform - Works on Android, iOS, Web, Windows, macOS, Linux

Installation

dependencies:
  iris_payment: ^0.1.0

Usage

Validate an AFM

import 'package:iris_payment/iris_payment.dart';

// Quick check
AfmValidator.isValid('090000045'); // true

// Detailed result
final result = AfmValidator.validate('123456789');
if (!result.isValid) {
  print(result.message); // "Invalid AFM checksum"
}

// Format (strip whitespace/dashes)
AfmValidator.format('090-000-045'); // "090000045"

Generate IRIS QR Data

// Static QR for physical store (customer enters amount in bank app)
final data = IrisData.fromAfm('090000045');
print(data.qrString); // "IRISTIN090000045"

// Dynamic QR for e-commerce (amount set by payment gateway)
final tx = IrisData.fromTransactionId('52bb5e73-2ebd-4299-9ccf-e9714b9873fc');
print(tx.qrString); // "IRISCOM52bb5e73-2ebd-4299-9ccf-e9714b9873fc"

// Parse a scanned QR code
final parsed = IrisData.parse('IRISTIN090000045');
print(parsed?.type); // IrisQrType.tin
print(parsed?.afm);  // "090000045"

Display QR Code Widget

// Simple QR code
IrisQrCode(
  afm: '090000045',
  size: 250,
)

// Customized QR code with logo
IrisQrCode(
  afm: '090000045',
  size: 300,
  foregroundColor: Colors.indigo,
  logo: Image.asset('assets/my_logo.png'),
  logoSize: 70,
)

// Full payment card
IrisPaymentCard(
  afm: '090000045',
  businessName: 'My Coffee Shop',
  qrSize: 200,
)

IRIS QR Format Reference

Type Format Use Case
Static IRISTIN{9-digit AFM} Physical store POS, printed QR
Dynamic IRISCOM{UUID} E-commerce, payment gateway generated

Static QR: The business displays a fixed QR code. Customers scan with their banking app and enter the amount themselves. Maximum per-transaction: 1,000 EUR.

Dynamic QR: Generated by payment gateways (Cardlink, Nexi, Viva, etc.) for each transaction. Contains a unique ID that maps to a specific amount on the gateway's backend.

AFM Checksum Algorithm

The Greek AFM is a 9-digit number. The last digit is a check digit:

checksum = (d[0]*256 + d[1]*128 + d[2]*64 + d[3]*32 + d[4]*16 + d[5]*8 + d[6]*4 + d[7]*2) % 11 % 10

The check digit must equal d[8].

License

MIT License - see LICENSE for details.

Libraries

iris_payment
Greek IRIS payment QR code generator.