You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:生成EAN13条码编码的JS代码无法输出目标编码6BSLLAA*dchgej+

问题分析与修复方案

你需要将EAN13条码6181100327649转换为编码6BSLLAA*dchgej+以适配EAN字体制作视觉内容,但现有JavaScript代码存在关键错误导致无法正常工作,以下是问题排查和修正后的方案:

原代码的错误点

  • 正则表达式写法错误:chaine.match("/^\\d{12}$/")用字符串包裹正则字面量,导致无法正确匹配12位纯数字输入,应直接使用正则表达式/^\d{12}$/。
  • 静态方法调用错误:chaine.fromCharCode()是错误调用方式,fromCharCode是String的静态方法,必须通过String.fromCharCode()调用,否则会抛出函数不存在的错误。
  • 变量类型冗余:tableA初始化为数值0,后续赋值为布尔值,虽不影响逻辑,但建议直接初始化为布尔值保证类型一致。

修正后的代码

function EAN(chaine) {
    let i = 0;
    let first = 0;
    let checksum = 0;
    let CodeBarre = "";
    let tableA = false;

    if (/^\d{12}$/.test(chaine)) {
        // 计算校验码:偶数位求和乘3,加奇数位求和
        for (i = 1; i < 12; i += 2) {
            checksum += parseInt(chaine.substr(i, 1));
        }
        checksum *= 3;
        for (i = 0; i < 12; i += 2) {
            checksum += parseInt(chaine.substr(i, 1));
        }
        const checkDigit = (10 - checksum % 10) % 10;
        chaine += checkDigit;

        // 拼接第一位数字与第二位的表A编码
        first = parseInt(chaine.substr(0, 1));
        CodeBarre = chaine.substr(0, 1) + String.fromCharCode(65 + parseInt(chaine.substr(1, 1)));

        // 处理第3-7位,根据第一位数字选择表A/表B
        for (i = 2; i <= 6; i++) {
            tableA = false;
            switch (i) {
                case 2: tableA = first >= 0 && first <= 3; break;
                case 3: tableA = [0,4,7,8].includes(first); break;
                case 4: tableA = [0,1,4,5,9].includes(first); break;
                case 5: tableA = [0,2,5,6,7].includes(first); break;
                case 6: tableA = [0,3,6,8,9].includes(first); break;
            }
            const digit = parseInt(chaine.substr(i, 1));
            CodeBarre += tableA ? String.fromCharCode(65 + digit) : String.fromCharCode(75 + digit);
        }

        // 添加分隔符与第8-13位的表C编码
        CodeBarre += "*";
        for (i = 7; i <= 12; i++) {
            const digit = parseInt(chaine.substr(i, 1));
            CodeBarre += String.fromCharCode(97 + digit);
        }
        CodeBarre += "+";
    }
    return CodeBarre;
}

// 测试输入:12位条码,自动计算校验码
document.getElementById("demo").innerHTML = EAN("618110032764");

测试结果

输入618110032764(12位,校验码为9,完整EAN13为6181100327649),运行修正后的代码将输出预期的6BSLLAA*dchgej+。

内容的提问来源于stack exchange,提问作者Ahmad Jaber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 05:15:37