Я успешно отсканировал и прочитал stringValue из QR. Но не смог преобразовать stringValue в читаемый формат.
https://uidai.gov.in/images/resource/User_manulal_QR_Code_15032019.pdf
Я пытался выполнить конвертацию, используя вышеуказанную процедуру, но не смог.
1) Я попытался библиотеку преобразовать в BigInt и преобразовать в двоичное значение
let str = String(self.metadataStringValue, radix: 2)
print(str)
2) Успешное преобразование большого целого в байтовый массив
let byteArray = Array(BigUInt(str)!.serialize())
print(byteArray)
3) Используется алгоритм декомпрессии Apple (zlib)
4) Считать значение байтового массива от индекса 0 до первого значения разделителя «255» и преобразовать значение этого байтового массива в строку с кодировкой «ISO-8859-1».
var firstDelimiter = ArraySlice<UInt8>()
var firstDelimiterArray = [UInt8]()
var delimiterIndex:Int = 0
for index in 0..<byteArray.count {
if byteArray[index] == 255 {
firstDelimiter = byteArray[delimiterIndex...index]
delimiterIndex = index + 1
firstDelimiterArray = firstDelimiter.map { $0 }
let data2 = Data(bytes: firstDelimiterArray, count: firstDelimiterArray.count)
print(data2 as NSData)
}
}
5) Кодировка «ISO-8859-1»
Не удалось преобразовать в формат readbale (я использовал .isolatin1)