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

如何用Expo条码扫描器判断GS1批号的结束位置?

GS1批号识别问题解决思路

在GS1标准中,批号以10开头,长度最多为20位,其结束由不可见的FNC1符号标识,当前代码仅能处理空格分隔的场景,无法识别FNC1符号来判断批号结束位置,求解决思路?

原实现代码:

function getCode(code, pos, len){
    let str = ''
    for(pos; pos < len + pos; pos++){
        str+=code[pos]
        if(str[pos+1] === ' '){
            break;
        }
    }
}

解决思路及修改方案

  • 明确FNC1的实际编码:GS1体系里的FNC1通常对应ASCII码29(组分隔符GS),先确认你拿到的code字符串中,FNC1是以什么形式存在的——是直接的控制字符,还是扫描器转义后的特定标识。
  • 调整终止判断逻辑:把原代码仅判断空格的条件,改成同时兼容FNC1和空格,再加上GS1标准的20位长度限制兜底,避免超出标准或越界:
    function getCode(code, pos, len){
        let str = '';
        // 这里用ASCII 29代表FNC1,根据实际扫描输出调整
        const FNC1 = String.fromCharCode(29);
        // 批号最多20位,取传入len和20的最小值作为循环上限
        const maxCount = Math.min(len, 20);
        
        for(let i = 0; i < maxCount; i++){
            const currentIndex = pos + i;
            // 防止数组越界提前终止
            if(currentIndex >= code.length) break;
            
            str += code[currentIndex];
            
            // 检查下一个字符是否是FNC1或空格,同时确保不越界
            if(currentIndex + 1 < code.length){
                const nextChar = code[currentIndex + 1];
                if(nextChar === FNC1 || nextChar === ' '){
                    break;
                }
            }
        }
        return str;
    }
    
  • 适配扫描器输出差异:如果你的条码扫描器输出的FNC1不是纯ASCII 29,而是带有前缀(比如]C1),需要针对性调整匹配逻辑,比如判断后续字符是否符合扫描器的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:46:09