Genereer van QR-code met gegevens in Golang

In dit artikel gaan we beschrijven hoe je QR (Quick Response) code kunt genereren met Golang. Een QR-code is een tweedimensionale streepjescode die informatie opslaat, net als bij traditionele eendimensionale streepjescode. Het is aanvankelijk ontwikkeld in de Japanse auto-industrie, maar is in de loop van de jaren ook in andere industrieën toegepast. QR-codes zijn in 2000 door ISO goedgekeurd als een internationale standaard en specificaties zijn hier te vinden. Raadpleeg deze wikipagina voor meer informatie over de QR-code.

Als een manier om Social Engineering binnen bedrijven te minimaliseren. Het is een goed idee om QR-codes te gebruiken, omdat mensen niet alleen door naar een QR-code te kijken kunnen zien of deze kwaadaardig is of niet. Aan de andere kant bevatten QR-codes meestal een URL die onmiddellijk wordt geladen, waardoor de gebruiker risico loopt. Daarom is het creëren van een acceptabel voorwendsel (pretext) belangrijk om een gebruiker te overtuigen dat ze de QR-code kunt vertrouwen.

Om QR-code in Golang te genereren, gaan we de go-qrcode library gebruiken.

Voordat we beginnen met het schrijven van codes en het importeren van de library, moet je eerst ervoor zorgen dat de GOPATH correct is ingesteld. Raadpleeg deze artikelen voor meer informatie over het instellen van uw GOPATH:

– Voor MACOS-gebruiker

– Voor Windows-gebruiker

– Voor Linux-user

Go-qrcode library importeren

Nadat je hebt gecontroleerd of de GOPATH correct is ingesteld, opent de terminal en voert de volgende opdracht uit:

go get -u github.com/skip2/go-qrcode/...

De () aan het einde betekent wildcard in Go en dit zal ook alle subpakketten installeren.

In dit voorbeeld gaan we een applicatie schrijven die onbewerkte PNG-bytes kan genereren en ook de mogelijkheid om een server te starten die een HTML-pagina retourneert met de QR-code.

QR-code webpagina Server

We gaan beginnen met het implementeren van de server die de HTML-pagina zal hosten. Lees dit artikel voor meer informatie over webservice in Go.

func serverStarten() {

	router := httprouter.New() // router instantie
	router.GET("/", qrCodeVersturen) // bestemmingspagina

	fmt.Println("server aan het luistert op poort 3000")
	serverFout := http.ListenAndServe(":3000", router)
	if serverFout != nil {
		log.Fatal("Kan webserver niet starten, oorzaak: ", serverFout)
	}
}

Functie die de HTML-pagina genereert

Als je al ervaring hebt met webservices in Go, is dit een zeer zelfverklarende code. Het behandelt het verzoek door de QR-code afbeeldingstag te genereren en deze in een HTML-pagina in te sluiten.

func qrCodeVersturen(reactie http.ResponseWriter, _ *http.Request, _ httprouter.Params) {

	// Genereer QR-code HTML afbeelding tag
	qr_code_afbeelding_tag := genereerQRCodeHtmlImageTag()
	// Stel antwoordkop in op Status Ok (200)
	reactie.WriteHeader(http.StatusOK)

	// HTML-afbeelding met QR-code
	responsePageHtml := "<!DOCTYPE html><html><body><h1>Voorbeeld QR-code Go Dev Tips</h1>" + qr_code_afbeelding_tag + "</body></html>"

	// Stuur HTML-reactie
	_, _ = reactie.Write([]byte(responsePageHtml))
}

Functie om QR-code html afbeeldingstag te genereren

Deze functie genereert de QR-code HTML afbeeldingstag als een Base 64 string. De website URL in dit voorbeeld is https://www.godevtips.com, maar je kunt je eigen favoriete website URL gebruiken.

func genereerQRCodeHtmlImageTag() string {

	qrCodeAfbeeldingsGegevens, _error := qrcode.Encode(websiteURL, qrcode.High, afbeeldingsGrootte)

	if _error != nil {
		log.Fatalln("Fout bij het genereren van QR-code. ", _error)
	}

	// Codeer onbewerkte QR-code gegevens naar base 64
	gecodeerdeGegevens := base64.StdEncoding.EncodeToString(qrCodeAfbeeldingsGegevens)

	return "<img src=\"data:image/png;base64, " + gecodeerdeGegevens + "\">"
}

Hoofdfunctie (main)

De hoofdfunctie bevat het deel dat bepaalt welke optie moet worden gestart. Als je alleen de onbewerkte QR-PNG-bytes wilt genereren, moet je het argument bestand meesturen. Anders wordt een server gestart die de resulterende QR-code HTML-pagina host op poort 3000.

func main() {

	if len(os.Args) == 2 && os.Args[1] == "bestand" { // Bepaal welke optie moet worden gestart

		// Genereer alleen de onbewerkte PNG-bytes
		bestands_naam := "qr_code.png"
		_error := qrcode.WriteFile(websiteURL, qrcode.Medium, afbeeldingsGrootte, bestands_naam)

		if _error != nil {
			log.Fatal("Fout bij genereren van QR-code naar bestand ", _error)
		} else {
			fmt.Println("Qr-code bestand aangemaakt!")
		}
	} else {
		serverStarten()
	}
}

Voer en test de applicatie

Onbewerkte QR-PNG-bytes

Om het onbewerkte PNG-bestand te genereren, voer de volgende opdracht in de terminal:

go run qr_code_nl.go bestand

HTML pagina met QR-code

Om de server te starten en de QR-code webpagina te hosten, opent de terminal en voert de volgende opdracht uit:

go run qr_code_nl.go

Zodra de server actief is, open je browser en ga naar http://localhost:3000/ en je zal de HTML-webpagina zien. Wanneer je de QR-code scant, wordt de GoDevTips webpagina gelanceerd.

Zie onze GitHub repository voor de broncode van het project en kloon onze repository voor alle toekomstige projecten.

Volg ons:

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *