Sample code for 30+ languages & platforms
Delphi DLL

ZATCA Decode QR Code

See more ZATCA Examples

Decodes a base64 ZATCA QR code.

Note: This example requires Chilkat v9.5.0.92 or greater.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, BinData;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
qr: PWideChar;
bd: HCkBinData;
index: Integer;
expectedTag: Integer;
tag: Integer;
len: Integer;
tagValue: PWideChar;

begin
success := False;

// Note: This example requires Chilkat v9.5.0.92 or greater.

qr := 'ARdBaG1lZCBNb2hhbWVkIEFMIEFobWFkeQIPMzAwMDc1NTg4NzAwMDAzAxQyMDIyLTAzLTEzVDE0OjQwOjQwWgQHMTEwOC45MAUFMTQ0LjkGLCtiQTFtdWNWSTY3SDRXQ2JOL2U5SjJxVXBIVHQzVHdNZHhsa09XVGVvdjg9B2BNRVlDSVFDWWg1ZTNpcklxV2w1WXRhQ25LaXVqTUlUbW9rWFlPUE1wSURDSW9XVzc5d0loQU1YbWMrTUZIR3RhZUJzZU91RUdUbHdENmcwOWdOUVBSUHVZODlzNjVPV1MIWDBWMBAGByqGSM49AgEGBSuBBAAKA0IABNMAr2WtNWSj2uSrplhxz0cNFk/hv1LjMDgqbthcn6ydNWEuTNTQeyZJf1SfyMOFFM4cMpp+3wL+65Rj3fi+4w0JSDBGAiEAlcAzHKujzvjHJrAV1M/79RnYRqe66kmtgMUykr/N/CACIQDgTQwbfftw0pYo6FX8c63Q4edvFgt+7JhHaBlla0qRtQ==';

qr := 'AQxGaXJveiBBc2hyYWYCCjEyMzQ1Njc4OTEDEzIwMjEtMTEtMTcgMDg6MzA6MDAEBjEwMC4wMAUFMTUuMDAGLDlmc3JYVW8rU3BYQVlJTkw5aGFLU2dEOXgxaVJsZk53SVBDZnBlWXczYTA9B1hYMEM4VjFIL3hUMGdOaytWWXh2U2Z6UFJlUjZPM2t5VXA0TERITzJLMzlNSGJETXVvTGltQSt3RnovV2pVdEdMSHpaK0J5enNmWUdEQzliNUFGSU1FQT09CFgwVjAQBgcqhkjOPQIBBgUrgQQACgNCAARw3B+mu14x0h3pJFKqEWWT7DmD7jWYkZV7qHyikPlN4P/4/b7YD+A9wnFI92HTKm+/BGKXVf/pfLtsmdIIaPHnCUgwRgIhAMTjOkWwcNu5Aw5k1Yr3YgbPhdxKoJV1a3+5ShPtx1/IAiEAyrwsA/NuqV6XjybyrZpMp6eJAqslACLfCldti/PVOQs=';

bd := CkBinData_Create();
success := CkBinData_AppendEncoded(bd,qr,'base64');

index := 0;
expectedTag := 1;

while (expectedTag <= 9) do
  begin

    // Get the tag
    tag := CkBinData_GetByte(bd,index);
    if (tag <> expectedTag) then
      begin
        Memo1.Lines.Add('Expected tag ' + IntToStr(expectedTag));
        Exit;
      end;

    index := index + 1;
    len := CkBinData_GetByte(bd,index);
    if (len = 0) then
      begin
        Memo1.Lines.Add('Expected length > 0');
        Exit;
      end;

    index := index + 1;
    // Tags 8 and 9 contain binary data.
    if (expectedTag >= 8) then
      begin
        tagValue := CkBinData__getEncodedChunk(bd,index,len,'base64');
      end
    else
      begin
        tagValue := CkBinData__getTextChunk(bd,index,len,'utf-8');
      end;
    Memo1.Lines.Add('tag ' + IntToStr(tag) + ': ' + tagValue);

    index := index + len;
    expectedTag := expectedTag + 1;
  end;

CkBinData_Dispose(bd);

end;