2016-04-12 117 views
1

我一直在試圖建立一個小的基於HTML/JavaScript的代碼128型B文本生成器。Javascript代碼128字符串生成器 - ASCII值> 127問題

我有它適用於大多數條形碼,但我遇到問題,如果使用的值創建一個校驗和是一個字符比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代碼。 ?modVal + 32:

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); 
    } 

謝謝, -David

回答

0

校驗應如果大於126

變種校驗=使用String.fromCharCode(modVal + 32> 126 modVal + 32 + 18 18添加);

+0

感謝您的回覆。當我將該代碼與上述部件號(500.77005.YELLO.XXXXX.0160828)結合使用時,我得到一個空白的校驗和。這是更新的小提琴,https://jsfiddle.net/3vpL3ytz/。 – DMartins