1

小さな html/javascript ベースのコード 128 タイプ B テキスト ビルダーを構築しようとしています。

ほとんどのバーコードで機能していますが、使用された値が ascii 127 より大きい文字のチェックサムを作成する場合、問題が発生しています。その値を置き換えるために何を使用すればよいかわかりません場合。バーコードに 'Code 3' と 'FNC X' の値を追加することについて読んだことがありますが、中括弧を使用してどの形式で、FNC が 'FNC4' または 'FNC 4' であるか、またはそれがチェックサム。

このサイトhttp://jtbarton.com/Barcodes/BarcodeStringBuilderExample.aspxの無料の 128 フォントを使用しています。値が 127 を超える場合、32 を追加する代わりに既存の ASCII 値を取得するなど、さまざまな条件を試しましたが、バーコードは読み取れません。

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

ありがとう -デビッド

4

1 に答える 1

0

チェックサムが 126 より大きい場合は 18 を追加する必要があります

var checksum = String.fromCharCode(modVal+32 > 126 ? modVal+32+18 : modVal+32);

于 2016-09-10T06:13:56.683 に答える