바코드 스캐너 기호 작업하기
이 항목은 UWP(Universal Windows Platform) 바코드 스캐너 API를 사용하여 스캐너를 수동으로 구성하지 않고 바코드 기호를 처리하는 방법을 설명합니다.
바코드 기호는 특정한 바코드 형식으로 데이터를 매핑한 것입니다. 몇 가지 일반적인 기호로는 UPC, 코드 128, QR 코드 등이 있습니다.
지원되는 기호 확인하기
여러 제조업체의 서로 다른 바코드 스캐너 모델에서 애플리케이션이 사용될 수 있기 때문에 지원되는 기호 목록을 결정하기 위해 스캐너를 쿼리하고 싶을 것입니다. 애플리케이션에서 일부 스캐너에서 지원되지 않는 특정 기호가 필요하거나 스캐너에서 수동 또는 프로그래밍 방식으로 비활성화된 기호를 활성화해야 하는 경우에 유용할 수 있습니다.
BarcodeScanner.FromIdAsync를 사용하여 BarcodeScanner 개체를 가져오고 나면 GetSupportedSymbologiesAsync를 호출하여 디바이스에서 지원되는 기호 목록을 확보합니다.
다음 예제에서는 바코드 스캐너의 지원되는 기호 목록을 가져와서 텍스트 블록에 표시합니다.
private void DisplaySupportedSymbologies(BarcodeScanner barcodeScanner, TextBlock textBlock)
{
var supportedSymbologies = await barcodeScanner.GetSupportedSymbologiesAsync();
foreach (uint item in supportedSymbologies)
{
string symbology = BarcodeSymbologies.GetName(item);
textBlock.Text += (symbology + "\n");
}
}
특정 기호가 지원되는지 여부 확인
스캐너에서 특정 기호가 지원되는지 여부를 확인하기 위해 IsSymbologySupportedAsync를 호출할 수 있습니다.
다음 예제에서는 바코드 스캐너가 Code32 기호를 지원하는지 확인합니다.
bool symbologySupported = await barcodeScanner.IsSymbologySupportedAsync(BarcodeSymbologies.Code32);
인식된 기호 변경
경우에 따라 바코드 스캐너가 지원하는 기호의 하위 집합을 사용하고 싶을 수 있습니다. 이는 애플리케이션에서 사용할 목적이 아니었던 기호를 차단하는 데 특히 유용합니다. 예를 들어, 사용자가 오른쪽 바코드를 스캔하도록 항목 SKU를 얻을 때 UPC 또는 EAN으로 스캔을 제한하고, 일련 번호를 얻을 때 코드 128로 스캔을 제한할 수 있습니다.
일단 스캐너에서 지원되는 기호를 파악하면 인식하기를 원하는 기호를 설정할 수 있습니다. 이는 ClaimedBarcodeScanner 개체를 ClaimScannerAsync를 사용하여 설정한 후에 수행할 수 있습니다. SetActiveSymbologiesAsync를 호출하여 목록에서 누락된 기호는 비활성화하고 특정 기호 세트는 활성화할 수 있습니다.
다음 예제에서는 클레임된 바코드 스캐너의 활성 기호를 Code39 및 Code39Ex로 설정합니다.
private async void SetSymbologies(ClaimedBarcodeScanner claimedBarcodeScanner)
{
var symbologies = new List<uint>{ BarcodeSymbologies.Code39, BarcodeSymbologies.Code39Ex };
await claimedBarcodeScanner.SetActiveSymbologiesAsync(symbologies);
}
바코드 기호 특성
다양한 바코드 기호는 여러 디코딩 길이 지원, 원시 데이터의 일부로 호스트에 확인 숫자 전송 및 숫자 유효성 검사 확인과 같은 다양한 특성을 가질 수 있습니다. BarcodeSymbologyAttributes 클래스를 사용하면 지정된 ClaimedBarcodeScanner 및 바코드 기호에 대해 이러한 특성을 가져와 설정할 수 있습니다.
GetSymbologyAttributesAsync를 사용하여 지정된 기호의 특성을 가져올 수 있습니다. 다음 코드 조각은 ClaimedBarcodeScanner에 대한 Upca 기호 특성을 가져옵니다.
BarcodeSymbologyAttributes barcodeSymbologyAttributes =
await claimedBarcodeScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.Upca);
특성 수정을 완료하고 특성을 설정할 준비가 되면 SetSymbologyAttributesAsync를 호출할 수 있습니다. 이 메서드는 속성이 성공적으로 설정된 경우, true인 bool을 반환합니다.
bool success = await claimedBarcodeScanner.SetSymbologyAttributesAsync(
BarcodeSymbologies.Upca, barcodeSymbologyAttributes);
데이터 길이로 스캔 데이터 제한
일부 기호는 코드 39나 코드 128과 같은 가변 길이입니다. 이러한 기호의 바코드는 종종 특정 길이의 서로 다른 데이터를 포함하는 서로 가까이 위치할 수 있습니다. 필요한 데이터의 특정 길이를 설정하면 잘못된 스캔을 방지할 수 있습니다.
디코딩 길이를 설정하기 전에 바코드 기호가 IsDecodeLengthSupported를 통해 여러 길이를 지원하는지 확인합니다. 지원된다는 것을 알게 되면 BarcodeSymbologyDecodeLengthKind 형식의 DecodeLengthKind를 설정할 수 있습니다. 이 속성은 다음 값 중 하나일 수 있습니다.
- AnyLength: 임의의 숫자 길이를 디코딩합니다.
- Discrete: DecodeLength1 또는 DecodeLength2 단일 바이트 문자의 길이를 디코딩합니다.
- Range: DecodeLength1과 DecodeLength2 단일 바이트 문자 사이의 길이를 디코딩합니다. DecodeLength1 및 DecodeLength2의 순서는 중요하지 않습니다(둘 중 하나는 다른 것보다 높거나 낮을 수 있음).
마지막으로 DecodeLength1 및 DecodeLength2 값을 설정하여 필요한 데이터의 길이를 제어할 수 있습니다.
다음 코드 조각은 디코딩 길이를 설정하는 방법을 보여줍니다.
private async Task<bool> SetDecodeLength(
ClaimedBarcodeScanner scanner,
uint symbology,
BarcodeSymbologyDecodeLengthKind kind,
uint decodeLength1,
uint decodeLength2)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsDecodeLengthSupported)
{
attributes.DecodeLengthKind = kind;
attributes.DecodeLength1 = decodeLength1;
attributes.DecodeLength2 = decodeLength2;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
확인 번호 전송
기호에 설정할 수 있는 또 다른 특성은 확인 번호가 원시 데이터의 일부로 호스트에 전송되는지 여부입니다. 이를 설정하기 전에 기호가 IsCheckDigitTransmissionSupported를 통해 확인 번호 전송을 지원하는지 확인합니다. 그런 다음, IsCheckDigitTransmissionEnabled를 통해 확인 번호 전송을 활성화할지 여부를 설정합니다.
다음 코드 조각은 확인 번호 전송을 설정하는 것을 보여줍니다.
private async Task<bool> SetCheckDigitTransmission(ClaimedBarcodeScanner scanner, uint symbology, bool isEnabled)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsCheckDigitTransmissionSupported)
{
attributes.IsCheckDigitTransmissionEnabled = isEnabled;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
확인 번호 유효성 검사
바코드 확인 번호의 유효성을 검사할지 여부를 설정할 수도 있습니다. 이를 설정하기 전에 기호가 IsCheckDigitValidationSupported를 통해 확인 번호 유효성 검사를 지원하는지 확인합니다. 그런 다음, IsCheckDigitValidationEnabled를 통해 확인 번호 유효성 검사를 활성화할지 여부를 설정합니다.
다음 코드 조각은 확인 번호 유효성 검사를 설정하는 것을 보여줍니다.
private async Task<bool> SetCheckDigitValidation(ClaimedBarcodeScanner scanner, uint symbology, bool isEnabled)
{
bool success = false;
BarcodeSymbologyAttributes attributes = await scanner.GetSymbologyAttributesAsync(symbology);
if (attributes.IsCheckDigitValidationSupported)
{
attributes.IsCheckDigitValidationEnabled = isEnabled;
success = await scanner.SetSymbologyAttributesAsync(symbology, attributes);
}
return success;
}
지원 및 피드백
질문에 대한 답변 찾기
질문이 있으세요? UWP 태그가 있는 Docs Q&A 포럼 또는 pointofservice 태그가 있는 Stack Overflow에 문의하세요.
귀하의 질문을 찾을 수 있도록 다음과 같이 도움을 주세요.
- Stack Overflow에서 질문에 pointofservice 태그를 추가합니다.
- Q&A 포럼의 게시물에 "UWP"라는 단어를 포함합니다.