実行サンプル
半角数字 半角英大文字 - $ / + % 半角スペース
スタート、ストップビットは不要
生成画像は[右クリック]⇒[名前を付けて画像を保存]が可能です
実行ソースコード
<input type="text" style="width:100%;max-width:500px;" maxlength="30" id="code39inp" value="SAMPLE01" /><br>
<input type="button" value="Code39バーコード画像生成" id="code39btn"><br>
<img id="code39img" style="width:100%;max-width:500px;"><br>
<div id="code39res"></div>
<script>
TCode39=function(){
this.nw=4;
this.code=[
{c:'0',bar:[1,0,1,0,0,1,1,0,1,1,0,1]},
{c:'1',bar:[1,1,0,1,0,0,1,0,1,0,1,1]},
{c:'2',bar:[1,0,1,1,0,0,1,0,1,0,1,1]},
{c:'3',bar:[1,1,0,1,1,0,0,1,0,1,0,1]},
{c:'4',bar:[1,0,1,0,0,1,1,0,1,0,1,1]},
{c:'5',bar:[1,1,0,1,0,0,1,1,0,1,0,1]},
{c:'6',bar:[1,0,1,1,0,0,1,1,0,1,0,1]},
{c:'7',bar:[1,0,1,0,0,1,0,1,1,0,1,1]},
{c:'8',bar:[1,1,0,1,0,0,1,0,1,1,0,1]},
{c:'9',bar:[1,0,1,1,0,0,1,0,1,1,0,1]},
{c:'A',bar:[1,1,0,1,0,1,0,0,1,0,1,1]},
{c:'B',bar:[1,0,1,1,0,1,0,0,1,0,1,1]},
{c:'C',bar:[1,1,0,1,1,0,1,0,0,1,0,1]},
{c:'D',bar:[1,0,1,0,1,1,0,0,1,0,1,1]},
{c:'E',bar:[1,1,0,1,0,1,1,0,0,1,0,1]},
{c:'F',bar:[1,0,1,1,0,1,1,0,0,1,0,1]},
{c:'G',bar:[1,0,1,0,1,0,0,1,1,0,1,1]},
{c:'H',bar:[1,1,0,1,0,1,0,0,1,1,0,1]},
{c:'I',bar:[1,0,1,1,0,1,0,0,1,1,0,1]},
{c:'J',bar:[1,0,1,0,1,1,0,0,1,1,0,1]},
{c:'K',bar:[1,1,0,1,0,1,0,1,0,0,1,1]},
{c:'L',bar:[1,0,1,1,0,1,0,1,0,0,1,1]},
{c:'M',bar:[1,1,0,1,1,0,1,0,1,0,0,1]},
{c:'N',bar:[1,0,1,0,1,1,0,1,0,0,1,1]},
{c:'O',bar:[1,1,0,1,0,1,1,0,1,0,0,1]},
{c:'P',bar:[1,0,1,1,0,1,1,0,1,0,0,1]},
{c:'Q',bar:[1,0,1,0,1,0,1,1,0,0,1,1]},
{c:'R',bar:[1,1,0,1,0,1,0,1,1,0,0,1]},
{c:'S',bar:[1,0,1,1,0,1,0,1,1,0,0,1]},
{c:'T',bar:[1,0,1,0,1,1,0,1,1,0,0,1]},
{c:'U',bar:[1,1,0,0,1,0,1,0,1,0,1,1]},
{c:'V',bar:[1,0,0,1,1,0,1,0,1,0,1,1]},
{c:'W',bar:[1,1,0,0,1,1,0,1,0,1,0,1]},
{c:'X',bar:[1,0,0,1,0,1,1,0,1,0,1,1]},
{c:'Y',bar:[1,1,0,0,1,0,1,1,0,1,0,1]},
{c:'Z',bar:[1,0,0,1,1,0,1,1,0,1,0,1]},
{c:'-',bar:[1,0,0,1,0,1,0,1,1,0,1,1]},
{c:'.',bar:[1,1,0,0,1,0,1,0,1,1,0,1]},
{c:' ',bar:[1,0,0,1,1,0,1,0,1,1,0,1]},
{c:'$',bar:[1,0,0,1,0,0,1,0,0,1,0,1]},
{c:'/',bar:[1,0,0,1,0,0,1,0,1,0,0,1]},
{c:'+',bar:[1,0,0,1,0,1,0,0,1,0,0,1]},
{c:'%',bar:[1,0,1,0,0,1,0,0,1,0,0,1]},
{c:'*',bar:[1,0,0,1,0,1,1,0,1,1,0,1]},
];
this.res='';
let can=document.createElement('canvas');
let ctx=can.getContext('2d', {willReadFrequently:true});
this.getimg=function(st){
st='*'+this.bcd(st)+'*';
this.res=st;
can.width=st.length*this.nw*13+this.nw*3;
can.height=this.nw*12;
can.style.width=(st.length*this.nw*13+this.nw*3)+'px';
can.style.height=this.nw*6+'px';
ctx.fillStyle="rgba(255,255,255,1.0)";
ctx.fillRect(0,0,can.width,can.height);
for(let i=0;i<st.length;i++){
let s=st.substr(i,1);
let j=0;
for(let k=0;k<this.code.length;k++){
if(this.code[k].c==s){
j=k;
break;
}
}
for(k=0;k<12;k++){
if(this.code[j].bar[k]==1){
ctx.beginPath();
ctx.fillStyle = "rgba(0,0,0,1.0)" ;
ctx.rect(this.nw*2+(i*13+k)*this.nw,this.nw*2,this.nw,this.nw*8);
ctx.fill();
}
}
}
return can.toDataURL('image/png');
}
this.zen2han=function(str){
return str.replace(/[A-Za-z0-9]/g, function(s){
return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
});
}
this.bcd=function(v){
v=this.zen2han(v);
v=v.replace(/[^0-9a-zA-Z\-\.\$\/\+\%\ ]+/gi,'');
v=v.toUpperCase();
//console.log(v);
return v;
}
}
code39=new TCode39;
window.addEventListener('load',function(){
document.getElementById('code39btn').addEventListener('click',function(){
document.getElementById('code39img').src=code39.getimg(document.getElementById('code39inp').value);
document.getElementById('code39res').innerHTML=code39.res;
});
});
</script>
