2016-04-12 6 views
1

Я пытаюсь создать небольшой код HTML типа B, созданный на основе html/javascript 128.Javascript Code 128 String Builder - Ascii Value> 127 issue

У меня это работает для большинства штрих-кодов, но я столкнулся с проблемой, если используемое значение создает контрольную сумму, которая является символом, который больше, чем ascii 127. Я не уверен, что я должен использовать для замены это значение в этом случае. Я читал о добавлении значений «Code 3» и «FNC X» в штрих-код, но не ясно, в каком формате, с фигурными скобками, и должен ли FNC быть «FNC4» или «FNC 4», или если это имеет отношение к контрольная сумма.

Я использую бесплатный шрифт 128 с этого сайта, http://jtbarton.com/Barcodes/BarcodeStringBuilderExample.aspx. Я пробовал различные условия, например, если значение> 127, замените существующее значение ascii вместо добавления 32, но штрих-код тогда не читается.

У меня есть jsfiddle здесь, https://jsfiddle.net/jcqvag5g/. Если вы используете значение 500.77005.YELLO.XXXXX.0160828, текст штрих-кода недействителен.

Любое понимание будет оценено по достоинству. На данный момент я не нашел рабочего решения. Это также может быть конкретный шрифт штрих-кода, который я использую, поэтому рекомендации для других твердых 128 шрифтов также будут оценены.

Это главный код js.

function textTo128(str) { 
    /* 
    * Generate 128 Barcode text, suitable for copying and pasting. 
    */ 
     var len   = str.length; //str.length - get length of string, used to generate the checksum. 
     var type128  = 104; // 128 Type B start 
     var typeClose = 106; 
     var total  = 104; 

     var i; // Counter Variable 
     for(i=0;i<len;i++){ 
      total += ((i+1) * (str.charCodeAt(i)-32)); //Multiply char position with decimal value of character, keep running total 
     } 

     var modVal  = total % 103; // Use Modulus to find our checksum 
     var checksum = String.fromCharCode(modVal+32); 

     if(modVal+32>126){alert(modVal+32);}; 
     document.getElementById('barcodeTotal').innerHTML = String.fromCharCode(type128+100) + str + checksum + String.fromCharCode(typeClose+100); 
    } 

Спасибо, -Давид

ответ

0

контрольная сумма должна добавить 18, если больше 126

вар Контрольная сумма = String.fromCharCode (modVal + 32> 126 modVal + 32 + 18: modVal + 32);

+0

Спасибо, что ответили. Я получаю пробел для контрольной суммы, когда я использую этот код в сочетании с номером детали выше (500.77005.YELLO.XXXXX.0160828). Это обновленная скрипка, https://jsfiddle.net/3vpL3ytz/. – DMartins