다음을 통해 공유


바코드 데이터 가져오기 및 이해

이 항목에서는 BarcodeScannerReport 개체의 바코드 스캐너에서 데이터를 가져오고 해당 형식과 내용을 이해하는 방법에 대해 설명합니다.

바코드 스캐너를 설정한 후 바코드를 스캔하면 DataReceived 이벤트가 발생합니다. ClaimedBarcodeScanner이 이 이벤트에 등록해야 합니다. DataReceived 이벤트는 바코드 데이터에 액세스하는 데 사용할 수 있는 BarcodeScannerDataReceivedEventArgs 개체를 전달합니다.

DataReceived 이벤트 구독

ClaimedBarcodeScanner이 있으면, 이를 사용하여 DataReceived 이벤트를 구독합니다.

claimedBarcodeScanner.DataReceived += ClaimedBarcodeScanner_DataReceived;

이벤트 처리기는 ClaimedBarcodeScannerBarcodeScannerDataReceivedEventArgs 개체를 전달받습니다. 이 개체의 Report 속성을 통해 형식이 BarcodeScannerReport인 바코드 데이터에 액세스할 수 있습니다 .

private async void ClaimedBarcodeScanner_DataReceived(ClaimedBarcodeScanner sender, BarcodeScannerDataReceivedEventArgs args)
{
    // Parse the data
}

데이터 가져오기

BarcodeScannerReport이 있으면 바코드 데이터를 액세스하고 구문을 분석할 수 있습니다. BarcodeScannerReport 세 가지 속성이 있습니다.

  • ScanData: 전체 원시 바코드 데이터입니다.
  • ScanDataLabel: 헤더, 체크섬 및 기타 정보를 포함하지 않는 디코딩된 바코드 레이블입니다.
  • ScanDataType: 디코딩된 바코드 레이블 형식입니다. 가능한 값은 BarcodeSymbologies 클래스에 정의됩니다.

ScanDataLabel 또는 ScanDataType중 하나에 액세스하려면, 먼저 IsDecodeDataEnabledtrue로 설정해야 합니다.

claimedBarcodeScanner.IsDecodeDataEnabled = true;

검사 데이터 형식 가져오기

디코딩된 바코드 레이블 유형을 가져오는 것은 매우 간단합니다. ScanDataTypeGetName 호출하기만 하면 됩니다.

private string GetSymbology(BarcodeScannerDataReceivedEventArgs args)
{
    return BarcodeSymbologies.GetName(args.Report.ScanDataType);
}

검사 데이터 레이블 가져오기

디코딩된 바코드 레이블을 얻으려면 알아야 할 몇 가지 사항이 있습니다. 특정 데이터 형식에만 인코딩된 텍스트가 포함되어 있으므로 먼저 기호를 문자열로 변환할 수 있는지 확인한 다음, ScanDataLabel 가져오는 버퍼를 인코딩된 UTF-8 문자열로 변환해야 합니다.

private string GetDataLabel(BarcodeScannerDataReceivedEventArgs args)
{
    uint scanDataType = args.Report.ScanDataType;

    // Only certain data types contain encoded text.
    // To keep this simple, we'll just decode a few of them.
    if (args.Report.ScanDataLabel == null)
    {
        return "No data";
    }

    // This is not an exhaustive list of symbologies that can be converted to a string.
    else if (scanDataType == BarcodeSymbologies.Upca ||
        scanDataType == BarcodeSymbologies.UpcaAdd2 ||
        scanDataType == BarcodeSymbologies.UpcaAdd5 ||
        scanDataType == BarcodeSymbologies.Upce ||
        scanDataType == BarcodeSymbologies.UpceAdd2 ||
        scanDataType == BarcodeSymbologies.UpceAdd5 ||
        scanDataType == BarcodeSymbologies.Ean8 ||
        scanDataType == BarcodeSymbologies.TfStd)
    {
        // The UPC, EAN8, and 2 of 5 families encode the digits 0..9
        // which are then sent to the app in a UTF8 string (like "01234").
        return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanDataLabel);
    }

    // Some other symbologies (typically 2-D symbologies) contain binary data that
    // should not be converted to text.
    else
    {
        return "Decoded data unavailable.";
    }
}

원시 검사 데이터 가져오기

바코드에서 전체 원시 데이터를 얻으려면 ScanData에서 가져오는 버퍼를 문자열로 변환하기만 하면 됩니다.

private string GetRawData(BarcodeScannerDataReceivedEventArgs args)
{
    // Get the full, raw barcode data.
    if (args.Report.ScanData == null)
    {
        return "No data";
    }

    // Just to show that we have the raw data, we'll print the value of the bytes.
    else
    {
        return CryptographicBuffer.ConvertBinaryToString(BinaryStringEncoding.Utf8, args.Report.ScanData);
    }
}

이 데이터는 일반적으로 스캐너에서 전달되는 형식입니다. 그러나 메시지 헤더 및 예고편 정보는 애플리케이션에 대한 유용한 정보를 포함하지 않으며 스캐너 관련 정보가 될 수 있으므로 제거됩니다.

일반적인 헤더 정보는 접두사 문자(예: STX 문자)입니다. 일반적인 트레일러 정보에는 종결자 문자(예: ETX 또는 CR 문자)와, 스캐너에서 생성되는 경우의 블록 검사 문자가 있습니다.

이 속성은 스캐너에서 반환되는 경우 기호 문자를 포함해야 합니다(예: UPC-A에 대해 A). 또한 레이블에 있고 스캐너에서 반환되는 경우에는 확인 숫자를 포함해야 합니다. (스캐너 구성에 따라 기호 문자와 확인 숫자가 모두 있거나 없을 수 있습니다. 스캐너는 있는 경우 이를 반환하지만, 기호 문자나 확인 숫자가 없는 경우 이를 생성하거나 계산하지 않습니다.)

일부 상품은 추가 바코드로 표시될 수 있습니다. 이 바코드는 일반적으로 기본 바코드의 오른쪽에 배치되며 추가 정보 2~5자로 구성됩니다. 스캐너가 주 바코드와 보조 바코드가 모두 포함된 상품을 읽는 경우 보조 문자가 주 문자에 추가되고, 그 결과 문자열은 하나의 레이블로 애플리케이션에 전달됩니다. (스캐너는 추가 코드 읽기를 사용하거나 사용하지 않도록 설정하는 구성을 지원할 수 있습니다.)

일부 상품은 여러 레이블로 표시될 수 있으며, 멀티심볼 레이블 또는 계층 레이블이라고도 합니다. 이러한 바코드는 일반적으로 세로로 정렬되며 동일하거나 다른 기호일 수 있습니다. 스캐너가 여러 레이블이 포함된 상품을 읽는 경우 각 바코드는 별도의 레이블로 애플리케이션에 전달됩니다. 이러한 바코드 형식의 표준화가 현재 부족하기 때문에 이 작업이 필요합니다. 개별 바코드 데이터에 따라 모든 변형을 확인할 수 없습니다. 따라서 애플리케이션은 반환된 데이터에 따라 여러 레이블 바코드를 읽은 시기를 결정해야 합니다. (스캐너는 여러 레이블 읽기를 지원하거나 지원하지 않을 수 있습니다.)

애플리케이션에서 DataReceived 이벤트가 발생하기 전에 이 값이 설정됩니다.

지원 및 피드백

질문에 대한 답변 찾기

질문이 있으세요? UWP 태그가 있는 Docs Q&A 포럼 또는 pointofservice 태그가 있는 Stack Overflow에 대해 문의하세요.

질문을 찾는 데 도움이 됩니다.

  • pointofservice 태그를 Stack Overflow의 질문에 추가합니다.
  • Q&A 포럼의 게시물에 "UWP" 용어 포함

참고하십시오