How to Get Detailed Barcode Information
The Dynamsoft Barcode Reader SDK provides APIs for you to get the detailed barcode information like checksum digit, start/stop characters, error correction level, etc. To learn more about what information you can get, see the following API links:
Here we take QR Code as example and show how to get the version and model of a QR Code.
What is the Version of a QR Code?
QRCode Version | Modules |
---|---|
Version 1 | 21 x 21 |
Version 2 | 25 x 25 |
… | … |
Version N | (17 + N x 4) x (17 + N x 4) |
Version 40 | 177 x 177 |
What is the Model of a QR Code?
QRCode Model | Description |
---|---|
Model 1 | The original QR Code. It is a code capable of coding 1,167 numerals with its maximum version being 14 (73 x 73 modules). |
Model 2 | Created by improving Model 1 so that this code can be read smoothly even if it is distorted in some way. This code can encode up to 7,089 numerals with its maximum version being 40 (177 x 177 modules). Today, the term QRCode usually refers to QRCode Model 2. |
Code Snippet for Getting Detailed Barcode Information
- JavaScript
- C
- C++
- C#
- Java
- Android
- Objective-C
- Swift
- Python
(async() => { let scanner = await Dynamsoft.DBR.BarcodeScanner.createInstance(); scanner.onUniqueRead = (txt, result) => { // Gets detailed information about QR codes. if(result.barcodeFormat == Dynamsoft.DBR.EnumBarcodeFormat.BF_QR_CODE) { let QRCodeDetails = result.detailedResult; let model = QRCodeDetails.model; let version = QRCodeDetails.version; let moduleSize = QRCodeDetails.moduleSize; } }; await scanner.show(); })();
int iRet = -1; char errorBuf[512]; TextResultArray* paryResult = NULL; iRet = DBR_InitLicense("YOUR-LICENSE-KEY", errorBuf, 512); if (iRet != DBR_OK) { printf("%s\n", errorBuf); } void* reader = DBR_CreateInstance(); DBR_DecodeFile(reader, "YOUR-IMAGE-FILE-WITH-QR-CODES", ""); // Start decoding DBR_GetAllTextResults(reader, &paryResult); for (int iIndex = 0; iIndex < paryResult->resultsCount; iIndex++) { if(BF_QR_CODE == paryResult->results[iIndex]->barcodeFormat) { QRCodeDetails* qrd = (QRCodeDetails*)paryResult->results[iIndex]->detailedResult; // For QR Code, the type of detailedResult is QRCodeDetails printf("QRCode Model:%d \r\n", qrd->model); printf("QRCode Version: %d \r\n", qrd->version); printf("BarcodeFormat: %s\r\n", paryResult->results[iIndex]->barcodeFormatString); printf("Text read: %s\r\n", paryResult->results[iIndex]->barcodeText); } } DBR_FreeTextResults(&paryResult); // Add further process
char errorBuf[512]; int iRet = -1; TextResultArray* paryResult = NULL; iRet = dynamsoft::dbr::CBarcodeReader::InitLicense("YOUR-LICENSE-KEY", errorBuf, 512); if (iRet != DBR_OK) { cout << errorBuf << endl; } CBarcodeReader* reader = new CBarcodeReader(); reader->DecodeFile("YOUR-IMAGE-FILE-WITH-QR-CODES", ""); // Start decoding reader->GetAllTextResults(&paryResult); for (int iIndex = 0; iIndex < paryResult->resultsCount; iIndex++) { if(BF_QR_CODE == paryResult->results[iIndex]->barcodeFormat) { QRCodeDetails* qrd = (QRCodeDetails*)paryResult->results[iIndex]->detailedResult; // For QR Code, the type of detailedResult is QRCodeDetails cout << "QRCode Model: " << qrd->model << endl; cout << "QRCode Version: " << qrd->version << endl; cout << "Barcode Format: " << paryResult->results[iIndex]->barcodeFormatString << endl; cout << "Barcode Text: " << paryResult->results[iIndex]->barcodeText << endl; } } CBarcodeReader::FreeTextResults(&paryResult); // Add further process
string errorMsg; EnumErrorCode iRet = BarcodeReader.InitLicense("YOUR-LICENSE-KEY", out errorMsg); if (iRet != EnumErrorCode.DBR_SUCCESS) { Console.WriteLine(errorMsg); } BarcodeReader reader = new BarcodeReader(); TextResult[] result = reader.DecodeFile("YOUR-IMAGE-FILE-WITH-QR-CODES", ""); // Start decoding for (int iIndex = 0; iIndex < result.Length; iIndex++) { if(EnumBarcodeFormat.BF_QR_CODE == result[iIndex].BarcodeFormat) { QRCodeDetails qrd = (QRCodeDetails)result[iIndex].DetailedResult; // For QR Code, the type of detailedResult is QRCodeDetails Console.WriteLine("QRCode Model: " + qrd.Model); Console.WriteLine("QRCode Version: " + qrd.Version); Console.WriteLine("Barcode Format: " + result[iIndex].BarcodeFormatString); Console.WriteLine("Barcode Text: " + result[iIndex].BarcodeText); } } // Add further process
BarcodeReader.initLicense("YOUR-LICENSE-KEY"); BarcodeReader reader = new BarcodeReader(); TextResult[] result = reader.decodeFile("YOUR-IMAGE-FILE-WITH-QR-CODES", ""); // Start decoding for (int iIndex = 0; iIndex < result.length; iIndex++) { if(EnumBarcodeFormat.BF_QR_CODE == result[iIndex].barcodeFormat) { QRCodeDetails qrd = (QRCodeDetails)result[iIndex].detailedResult; // For QR Code, the type of detailedResult is QRCodeDetails System.out.println("QRCode Model: " + qrd.model); System.out.println("QRCode Version: " + qrd.version); System.out.println("Barcode Format: " + result[iIndex].barcodeFormatString); System.out.println("Barcode Text: " + result[iIndex].barcodeText); } } // Add further process
BarcodeReader reader = new BarcodeReader(); TextResult[] result = reader.decodeFile("YOUR-IMAGE-FILE-WITH-QR-CODES"); // Start decoding for (int iIndex = 0; iIndex < result.length; iIndex++) { if(EnumBarcodeFormat.BF_QR_CODE == result[iIndex].barcodeFormat) { // For QR Code, the type of detailedResult is QRCodeDetails QRCodeDetails qrd = (QRCodeDetails)result[iIndex].detailedResult; //Add further process } }
NSError *err = nil; DynamsoftBarcodeReader* reader = [[DynamsoftBarcodeReader alloc] init]; NSArray<iTextResult*>* result = [reader decodeFileWithName:@"YOUR-IMAGE-FILE-PATH" error:&err]; // Start decoding for (iTextResult* barcode in result) { if(barcode.barcodeFormat == EnumBarcodeFormatQRCODE) { // For QR Code, the type of detailedResult is QRCodeDetails iQRCodeDetails* qrd = (iQRCodeDetails*)barcode.detailedResult; //Add further process } }
let reader = DynamsoftBarcodeReader.init() var result: [iTextResult]? = nil do { result = try reader.decodeFileWithName("YOUR-IMAGE-FILE-PATH") } catch let err { } // Start decoding for barcode in result ?? [] { if barcode.barcodeFormat == EnumBarcodeFormat.QRCODE { // For QR Code, the type of detailedResult is QRCodeDetails let qrd = barcode.detailedResult as! QRCodeDetails //Add further process } }
error = BarcodeReader.init_license("YOUR-LICENSE-KEY") if error[0] != EnumErrorCode.DBR_OK: print(error[1]) dbr = BarcodeReader() text_results = dbr.decode_file("YOUR-IMAGE-FILE-WITH-QR-CODES") for result in text_results: if EnumBarcodeFormat.BF_QR_CODE == result.barcode_format: qr_detail = result.detailed_result print("QRCode Model: ") print(qr_detail.model) print("QRCode Version: ") print(qr_detail.versions) print("Barcode Format: ") print(result.barcode_format_string) print("Barcode Text: ") print(result.barcode_text)