【Swift】 QR 코드의 분할 정보를 취득한다
약 수첩이나 자동차 검증 등에도 사용되고있는 것 같습니다.
iOS 앱에서 그 분할 정보를 취득하는 "이것이다!"라는 방법을 찾을 수 없었기 때문에 정리해 둡니다.
「아니 아니, 더 좋은 방법이 있어」라고 하는 분은 코멘트 받을 수 있으면 도움이 됩니다. . .
분할 QR 코드 정보
QR코드가 뭐라고 하는 것은 할애합니다.
구구주세요.
이번에 전하고 싶은 것은 QR 코드가 분할될 수 있다는 것입니다.
위와 같은 2개의 약 수첩용 QR코드는 2개 갖추어져 필요한 정보를 취득할 수 있습니다.
1개의 QR코드가 보관할 수 있는 정보량은 정해져 있기 때문에,
상한을 넘는 정보량을 출력하기 위해 QR 코드는 분할할 수 있다는 이야기입니다.
분할 정보는 어디에 있습니까?
QR 코드를 바이너리로 하면 알 수 있습니다.
바이너리 정보
설명
첫 번째 바이트의 처음 4비트
3이라면 분할 QR 코드
첫 번째 바이트 뒤 4비트
분할된 QR 코드 위치(0 시작)
두 번째 바이트의 처음 4비트
분할된 QR 코드의 최대 위치
두 번째 바이트 뒤 4비트
패리티 1
세 번째 바이트의 처음 4비트
패리티 2
네, 간단합니다.
보시다시피, 분할 정보가 4 비트 밖에 없기 때문에 최대 16 분할 밖에 할 수 없습니다.
예
여기에 「00110000 00011001 00110010~」으로 시작되는 QR코드가 있다고 합니다.
16진수로 하면 「30 19 32~」가 됩니다.
앞의 표에 비추면,
첫 번째 바이트의 처음 4비트가 3이므로 이 QR 코드가 분할되어 있음을 알 수 있습니다.
1바이트째의 뒤 4비트가 0이므로, 분할 QR의 1번째라고 알 수 있습니다. (0 시작이므로 첫 번째입니다)
2바이트째의 처음 4비트가 1이므로 QR코드의 총수는 2개인 것을 알 수 있습니다.
두 번째 바이트 뒤의 4비트와 세 번째 바이트의 처음 4비트는 패리티입니다. 두 번째 QR 코드와 동일하므로 ID처럼 사용할 수 있습니다.
덧붙여서, 상기의 QR 코드의 2번째의 바이너리(16진 표기)는 이하와 같습니다.
「31 19 34~」
Swift로 어떻게 얻는가?
AVFoundation에서 QR 코드를 읽을 때 델리게이트 메서드 내에서 검색하는 방법을 설명합니다.
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
if let metadataObject = metadataObjects.first {
guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else { return }
guard let readableObjectForQRCode = readableObject.descriptor as? CIQRCodeDescriptor else { return }
// 16進数のQRコード情報を取得
let hexQRCodeData = readableObjectForQRCode.errorCorrectedPayload.map { String(format: "%02X", $0)}
// 分割コードかチェック(trueなら分割コード)
let isSeparatedQRCode = hexQRCodeData.first!.hasPrefix("3")
// 分割コードの総数を取得
let secondByteFirstHex = hexQRCodeData[1].prefix(1) + 1
let total = Int(secondByteFirstHex, radix: 16)!
// 分割コードの位置を取得
let firstByteSecondHex = hexQRCodeData[0].suffix(1)
let position = Int(firstByteSecondHex, radix: 16)!
}
}
AVFoundation에서 QR 코드를 읽는 방법은 다음 기사를 참조하십시오.
htps : // 코 m / 오징어 아사마 y / ms / 58d1 401 98673
htps : // v.ぁsss d. jp / 아 rc c ぇ s / 이오 s 아 v 푹 푹신 치온 /
htps : // v.ぁsss d. jp / 아 rc c ぇ s / 이오 s 아 v 푹 푹신 푹신 아 v v p
요약
그 중 애플이 좋은 느낌의 방법을 제공할 것 같다.
하지만, 우선 QR코드의 사양을 알면 그렇게 어렵지 않기 때문에 별로 불필요한 생각도 한다.
어쨌든 곤란한 사람의 참고가되면 다행입니다!
참고 기사
Reference
이 문제에 관하여(【Swift】 QR 코드의 분할 정보를 취득한다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/Toshi_Tab/items/e528145b9e4f813a3cf9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)