Sample code for 30+ languages & platforms
PowerBuilder

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 PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
string ls_Qr
oleobject loo_Bd
integer li_Index
integer li_ExpectedTag
integer li_Tag
integer li_Len
string ls_TagValue

li_Success = 0

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

ls_Qr = "ARdBaG1lZCBNb2hhbWVkIEFMIEFobWFkeQIPMzAwMDc1NTg4NzAwMDAzAxQyMDIyLTAzLTEzVDE0OjQwOjQwWgQHMTEwOC45MAUFMTQ0LjkGLCtiQTFtdWNWSTY3SDRXQ2JOL2U5SjJxVXBIVHQzVHdNZHhsa09XVGVvdjg9B2BNRVlDSVFDWWg1ZTNpcklxV2w1WXRhQ25LaXVqTUlUbW9rWFlPUE1wSURDSW9XVzc5d0loQU1YbWMrTUZIR3RhZUJzZU91RUdUbHdENmcwOWdOUVBSUHVZODlzNjVPV1MIWDBWMBAGByqGSM49AgEGBSuBBAAKA0IABNMAr2WtNWSj2uSrplhxz0cNFk/hv1LjMDgqbthcn6ydNWEuTNTQeyZJf1SfyMOFFM4cMpp+3wL+65Rj3fi+4w0JSDBGAiEAlcAzHKujzvjHJrAV1M/79RnYRqe66kmtgMUykr/N/CACIQDgTQwbfftw0pYo6FX8c63Q4edvFgt+7JhHaBlla0qRtQ=="

ls_Qr = "AQxGaXJveiBBc2hyYWYCCjEyMzQ1Njc4OTEDEzIwMjEtMTEtMTcgMDg6MzA6MDAEBjEwMC4wMAUFMTUuMDAGLDlmc3JYVW8rU3BYQVlJTkw5aGFLU2dEOXgxaVJsZk53SVBDZnBlWXczYTA9B1hYMEM4VjFIL3hUMGdOaytWWXh2U2Z6UFJlUjZPM2t5VXA0TERITzJLMzlNSGJETXVvTGltQSt3RnovV2pVdEdMSHpaK0J5enNmWUdEQzliNUFGSU1FQT09CFgwVjAQBgcqhkjOPQIBBgUrgQQACgNCAARw3B+mu14x0h3pJFKqEWWT7DmD7jWYkZV7qHyikPlN4P/4/b7YD+A9wnFI92HTKm+/BGKXVf/pfLtsmdIIaPHnCUgwRgIhAMTjOkWwcNu5Aw5k1Yr3YgbPhdxKoJV1a3+5ShPtx1/IAiEAyrwsA/NuqV6XjybyrZpMp6eJAqslACLfCldti/PVOQs="

loo_Bd = create oleobject
li_rc = loo_Bd.ConnectToNewObject("Chilkat.BinData")
if li_rc < 0 then
    destroy loo_Bd
    MessageBox("Error","Connecting to COM object failed")
    return
end if
li_Success = loo_Bd.AppendEncoded(ls_Qr,"base64")

li_Index = 0
li_ExpectedTag = 1

do while (li_ExpectedTag <= 9)

    // Get the tag
    li_Tag = loo_Bd.GetByte(li_Index)
    if li_Tag <> li_ExpectedTag then
        Write-Debug "Expected tag " + string(li_ExpectedTag)
        destroy loo_Bd
        return
    end if

    li_Index = li_Index + 1
    li_Len = loo_Bd.GetByte(li_Index)
    if li_Len = 0 then
        Write-Debug "Expected length > 0"
        destroy loo_Bd
        return
    end if

    li_Index = li_Index + 1
    // Tags 8 and 9 contain binary data.
    if li_ExpectedTag >= 8 then
        ls_TagValue = loo_Bd.GetEncodedChunk(li_Index,li_Len,"base64")
    else
        ls_TagValue = loo_Bd.GetTextChunk(li_Index,li_Len,"utf-8")
    end if

    Write-Debug "tag " + string(li_Tag) + ": " + ls_TagValue

    li_Index = li_Index + li_Len
    li_ExpectedTag = li_ExpectedTag + 1
loop


destroy loo_Bd