KHQR code generator for Bakong payments
Enter your Bakong account ID and the name people should see, then pick riel or dollars. You get a static KHQR code that the payer scans and types the amount into.
Free, no sign-up. Runs in your browser. Nothing you type or upload is sent to us or stored.
Add a pay button to your Liite page
Put your KHQR code on a free page at liite.co/yourname, next to your prices and an order form, so people can order and pay you directly. Liite never touches the money.
How to use it
- Find your Bakong account ID in the Bakong app or your bank's app. It looks like name@bank.
- Type it here with the name to show and, if you like, your city. Pick riel (KHR) or US dollars (USD).
- Download the QR code as PNG or SVG.
- Scan it from a different app and pay yourself a small amount before you print it.
What is in a KHQR code
KHQR is Cambodia's standard payment QR code, set by the National Bank of Cambodia and built on the EMVCo standard. NBC describes it as one code that receives payments from any mobile banking app, including the Bakong app. Look for the KHQR label at the till.
For a person or a one-person business, NBC's guideline puts the Bakong account ID in tag 29 and nothing else in that template. The code then adds a category, the currency (116 for riel, 840 for US dollars), the country KH, your name, your city, the time the code was made and a four-character checksum. This tool writes exactly those fields, in the guideline's order. Its output matches NBC's own published static example, checksum included.
Why there's no amount field
A static KHQR has no amount: the payer types it, which suits a sticker by the till or a printed menu. NBC's SDK makes a code with an amount a dynamic one, and since version 2.8 (February 2025) a dynamic KHQR must carry an expiry time. A code that stops working doesn't belong on paper, so this tool only makes static codes.
For a one-off amount, such as a delivery fee, make the code in your banking app, which handles the expiry for you.
Your Bakong account ID
The account ID is the address of your Bakong wallet, written as a name, @ and a short bank code. NBC's examples include test_bakong@devb and khqr@devb. The tool checks that what you type has that shape and is at most 32 characters, the SDK's limit. It can't check that the account exists, so copy it from your app rather than typing it from memory.
Names go into the code in Latin letters, up to 25 characters; city names up to 15. If you leave the city empty, the code says Phnom Penh, the SDK's default.
Before you print
Scan the code with the Bakong app and with a different bank app, and send yourself a small amount. Check the name on the payment screen and that the money lands in the right account. Print the SVG at least 3 cm wide with a white border, and put your name or shop name next to it.
Questions
Is this KHQR code generator free?
Yes. It runs in your browser, needs no account and adds no fee. Payments go from the payer's app to your account; we never see the code or the money.
Which apps can pay a KHQR code?
NBC says KHQR receives payments from any mobile banking app, including the Bakong app. Test your code with the apps your customers use before you print it.
Can I put an amount in the code?
Not here. In NBC's SDK a code with an amount is dynamic and has to expire, so make those in your banking app. A static code lets the payer type the amount.
Is KHQR the same as Bakong?
Bakong is the National Bank of Cambodia's payment system; KHQR is the QR code standard that routes payments through it. Your Bakong account ID is what goes inside the code.