QR code · GOST paymentPayment QR code to GOST

Builds a payment code to the Russian standard GOST R 56042-2014 — the one printed on utility bills and invoices. A banking app fills the transfer form from it.

The account details never leave your browser — neither a database nor a log sees them
All code types
01Generator02String03Format04Questions05Related
01

Code generator

Data, styling and correction level — the preview updates on every keystroke
Data
20/20
9/9
20/20
10/12
The bank details passed validation
Styling
Frame with a caption

The frame keeps the four-module quiet zone for you — the very margin whose absence is the most common reason a printed code will not scan.

Code colour
Logo
Error correction
No logo — the whole correction budget is free
Export
Size

the background is not filled — the code sits on any surface In the PDF the code is vector and the caption is a 300 dpi image: base PDF fonts carry no Cyrillic, and this is the only way not to lose Russian text.

Payload
ST00012|Name=ООО «Весёлый двор»|PersonalAcc=40702810101000003699|BankName=ПАО Сбербанк|BIC=044525225|CorrespAcc=30101810400000000225|PayeeINN=3442072673|Sum=36000|Purpose=За домофон
Version 1161 modules
A static code, forever · free · no ads · no server
The code is readable, but there are remarkscontrast 18.5:1
  • Version 11 at level M: modules are small and there is little damage headroom — print it larger
02

The payment string

The whole content of the code is one string with fields separated by a vertical bar. Here it is broken apart field by field: what goes into the code, and where the mistake is.
217 bytes in the string
FieldValueRule
ST00012 ·service headerST is the format id, 0001 the version, the last digit the encoding: 1 for Windows-1251, 2 for UTF-8, 3 for KOI8-R
Name ·ООО «Весёлый двор»organisation name or full name
PersonalAcc ·40702810101000003699an account, not a card number
BankName ·ПАО Сбербанкthe payee bank name
BIC ·044525225the account checksum is computed from it
CorrespAcc ·30101810400000000225the bank correspondent account
PayeeINN3442072673required for budget payments
Sum36000in kopecks: 1500 roubles is 150000
PurposeЗа домофонwhat the payment is for

A dot marks the mandatory fields: without any one of them the code is non-standard and the bank may reject it. The amount is in kopecks — the field people get wrong more often than all the others combined.

03

About the standard

GOST R 56042-2014 is the Russian standard describing how to write bank details into a two-dimensional barcode. Adopted in 2014, it is now everywhere: utility bills, management company invoices, tax notices, payments for clubs and kindergartens. The idea is simple — instead of retyping a twenty-digit account, a person points a camera and gets a filled-in transfer form.

Why a bank rejects the code

Spaces around the separator

«Name=Romashka LLC | PersonalAcc=…» is already off-standard. No spaces before or after the vertical bar — the most common mistake when the string is assembled by hand.

Amount in roubles instead of kopecks

The code scans, the payment goes through, and the amount is a hundred times too small. The most galling failure of all: technically nothing is broken.

Too long a string

Every optional field makes the code denser. On a bill printed by a mono laser on grey paper a dense code will not read. The practical limit is about 300 bytes — experience, not a formal rule.

Guillemets and typographic dashes

Formally allowed, but some older banking apps trip over them. For payment codes plain quotes and a plain hyphen are safer.

Declared encoding is not the actual one

The header says ST00012, meaning UTF-8, while the string is written in Windows-1251. The payee name turns into mojibake, and the app either shows it or refuses the code.

Checked on screen only

Scan the finished code with at least two banking apps, and do it on real paper. A screen forgives almost anything; toner on porous paper forgives almost nothing.

04

Frequently asked questions

Four reasons, most common first: spaces around the «|» separator, which makes the string non-standard; too many optional fields, so the code gets dense and will not read off grey paper; the encoding declared in the header not matching the actual one, turning the payee name into mojibake; and plain wrong details, where the account checksum does not agree with the bank code.
«» added to favorites