Поделиться через


Работа с символами сканера штрихкодов

В этом разделе объясняется, как использовать API сканера штрихкодов универсальная платформа Windows (UWP) для обработки символов штрихкода без ручной настройки сканера.

Символика штрихкода — это сопоставление данных с определенным форматом штрихкода. Некоторые распространенные символы включают КОД 128, QR-код и т. д.

Определение поддерживаемых символов

Так как приложение может использоваться с разными моделями сканера штрихкодов от нескольких производителей, может потребоваться запросить сканер, чтобы определить список поддерживаемых символов. Это может быть полезно, если приложению требуется определенная символика, которая может не поддерживаться всеми сканерами или необходимо включить символы, которые были либо вручную, либо программно отключены на сканере.

Получив объект BarcodeScanner с помощью BarcodeScanner.FromIdAsync, вызовите 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 или 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. Следующий фрагмент кода получает атрибуты символики Upca для ClaimedBarcodeScanner.

BarcodeSymbologyAttributes barcodeSymbologyAttributes = 
    await claimedBarcodeScanner.GetSymbologyAttributesAsync(BarcodeSymbologies.Upca);

После завершения изменения атрибутов и готовности к их настройке можно вызвать SetSymbologyAttributesAsync. Этот метод возвращает логическое значение, которое имеет значение true , если атрибуты были успешно заданы.

bool success = await claimedBarcodeScanner.SetSymbologyAttributesAsync(
    BarcodeSymbologies.Upca, barcodeSymbologyAttributes);

Ограничение данных сканирования по длине данных

Некоторые символы представляют собой переменную длину, например Код 39 или Код 128. Штрихкоды этих символов могут находиться рядом друг с другом, содержащим разные данные часто определенной длины. Установка определенной длины необходимых данных может предотвратить недопустимые проверки.

Прежде чем задать длину декодирования, проверьте, поддерживает ли символика штрихкода несколько длин с помощью IsDecodeLengthSupported. После того как вы знаете, что оно поддерживается, можно задать ДекодеLengthKind, который имеет тип BarcodeSymbologyDecodeLengthKind. Это свойство может быть любым из следующих значений:

  • AnyLength: декодирование длины любого числа.
  • Дискретный: декодирование длины символов DecodeLength1 или DecodeLength2 с одним байтом.
  • Диапазон: декодирование длины между ДекодеLength1 и ДекодеЛенгth2 однобайтовых символов. Порядок декодированияLength1 и 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;
}

Поддержка и обратная связь

Получение ответов на вопросы

Есть вопросы? Попросите нас на форуме "Документы Q&A" с тегом UWP или Stack Overflow с тегом pointofservice.

Помогите нам найти свои вопросы:

См. также