2016-04-12 2 views
1

J'ai essayé de construire un petit constructeur de texte de type B basé sur html/javascript 128. Je l'ai qui fonctionne pour la plupart des codes à barres, mais je rencontre un problème si la valeur utilisée crée une somme de contrôle qui est un caractère qui est supérieur à ASCII 127. Je ne suis pas sûr de ce que je devrais utiliser pour remplacer cette valeur dans ce cas. J'ai lu de l'ajout des valeurs 'Code 3' et 'FNC X' dans le code à barres, mais le format n'est pas clair, avec des accolades et FNC devrait être 'FNC4' ou 'FNC 4', ou si cela est pertinent pour le somme de contrôle. J'utilise la police gratuite de 128 de ce site, http://jtbarton.com/Barcodes/BarcodeStringBuilderExample.aspx. J'ai essayé diverses conditions, comme si la valeur est> 127, prenez la valeur ASCII existante au lieu d'ajouter 32, mais le code à barres n'est alors pas lisible.Javascript Code 128 Chaîne Builder - Ascii Valeur> 127 numéro

J'ai un jsfiddle ici, https://jsfiddle.net/jcqvag5g/. Si vous utilisez une valeur comme 500.77005.YELLO.XXXXX.0160828, le texte du code-barres n'est pas valide.

Tout aperçu serait apprécié. Je n'ai pas trouvé de solution de travail pour le moment. Il pourrait aussi s'agir de la police de code à barres spécifique que j'utilise, donc des recommandations pour d'autres polices de caractères solides seraient également appréciées.

Ceci est le code js principal.

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

Merci, contrôle -David

Répondre

0

devrait ajouter 18 si plus de 126

contrôle var = String.fromCharCode (Modvál + 32> 126 Modvál + 32 + 18: 32 + Modvál)

+0

Merci de votre réponse. Je reçois un blanc pour la somme de contrôle lorsque j'utilise ce code en combinaison avec le numéro de pièce ci-dessus (500.77005.YELLO.XXXXX.0160828). C'est le violon mis à jour, https://jsfiddle.net/3vpL3ytz/. – DMartins