Tag 01, initiatiepunt
11 = statische QR (herbruikbaar, u voert het bedrag zelf in).12 = dynamische QR (eenmalig, bedrag vooraf ingevuld door het kassasysteem van de handelaar).
Standards · EMVCo merchant payment QR
De QR op een restauranttafel, parkeermachine of marktkraam werkt bijna altijd op EMVCo's TLV-formaat. Hij bevat de naam, stad, land, valuta, optioneel bedrag en een CRC-16-controlesom van de handelaar die mislukt als de payload is gewijzigd. De stickerwissel-aanval — een echte QR van een handelaar afdekken met die van de aanvaller — is de meest voorkomende QR-fraude wereldwijd. De QR decoderen vóór betaling laat zien aan wie u werkelijk betaalt.
De standaard is de EMVCo QR Code Specification, gepubliceerd door hetzelfde EMVCo-consortium dat chip-en-pinkaarten definieerde. Twee varianten delen het grootste deel van het formaat:
Bijna elk nationaal instant-betalingsschema is gebouwd op EMVCo MPM met enkele landspecifieke tags bovenop:
Het formaat is Tag-Length-Value-tekst, geen versleuteling, decodeerbaar door elke QR-scanner. De identiteit van de handelaar staat in gewone tekst en is wat uw wallet-app toont.
Elke EMVCo-payload begint met 000201 (Payload Format Indicator). Wat volgt is een reeks TLV-records: twee-teken-tag, twee-cijfer-lengte, waarde van die lengte, herhaald.
11 = statische QR (herbruikbaar, u voert het bedrag zelf in).12 = dynamische QR (eenmalig, bedrag vooraf ingevuld door het kassasysteem van de handelaar).
Landspecifieke ontvangersidentifier. Pix-sleutel (CPF / CNPJ / e-mail / telefoon / EVP UUID), UPI Virtual Payment Address, PromptPay-telefoon of nationaal ID, etc.
ISO 18245 4-cijferige categorie. 5812 = restaurant, 5411 = supermarkt, 7011 = logies, 5541 = tankstation, etc.
ISO 4217-numerieke code. 840 = USD, 978 = EUR, 826 = GBP, 986 = BRL (Braziliaanse real), 356 = INR (Indiase roepie).
Optioneel. Aanwezig in dynamische QR's (de handelaar heeft het vooraf ingevuld), afwezig in statische QR's (u voert het zelf in).
Optioneel. 55 geeft aan of een fooiprompt moet verschijnen; 56 / 57 bevatten een vaste of procentuele gemaksvergoeding.
ISO 3166-1 alpha-2-landcode. Nuttig wanneer betaalapps grensoverschrijdende overboekingen ondersteunen.
Tot 25 tekens. Dit is het veld dat uw wallet-app toont als "u betaalt aan ___". De handelaar bepaalt volledig wat hier staat. Een aanvaller die een stickerwissel uitvoert, plaatst welke string hij wil hier.
Tot 15 tekens. Waar de handelaar zich bevindt.
Optioneel maar nuttig voor fraudedetectie: een Amerikaanse handelaar wiens postcode niet overeenkomt met de stad is een signaal.
Sub-TLV. Bevat: factuurnummer, mobiel nummer, winkelnummer, loyaliteitsnummer, referentielabel, klantnummer, terminallabel, transactiedoel.
CRC-16/CCITT-FALSE over alles ervóór (inclusief de "6304"-header van het CRC-TLV zelf). Als dit niet overeenkomt, is de QR gewijzigd of beschadigd.
De techniek is ontmoedigend eenvoudig:
De handelaar merkt het pas wanneer de dagafsluiting aantoont dat de omzet tekortkomt. De klant merkt het niet omdat zijn wallet zegt "u heeft betaald aan", en de aanvaller kan de echte naam van de handelaar in tag 59 zetten. Of iets dergelijks ("Joe's Pizz4", "Joe's Pizzeria 2"): kleine variaties die een drukke klant niet opmerkt.
De fraude is gedocumenteerd in elk land waar mobiele betalingen gangbaar zijn: Brazilië (Pix-stickerwissel bij parkeermachines), India (UPI-stickerwissel bij tankstations), China (WeChat Pay-stickerwissel op etalageruiten), Singapore (PayNow bij hawker centres), VK (spaarpot-QR-wissels), VS (parkeermachines in Austin, San Francisco, LA).
Wat onze scanner u toont:
Fysieke aanwijzingen om te controleren vóór het scannen:
Onze analyser herkent de landtag en labelt het oordeel met de lokale schemanaam wanneer die van toepassing is. Dekt momenteel 54 landen inclusief alle grote instant-betalingssystemen. Zie de standaardenoverviewpagina voor de volledige lijst met per-schema details.
Sleep de QR in onze scanner. Het oordeel toont handelaar, stad, land, bedrag, valuta en of de CRC-controlesom geldig is. Duurt een paar seconden. Kan u de kosten van een diner of een hele maand parkeren besparen.