Example #1
0
        /// <summary>
        /// 将每个 AI 编码及其对应的数据编码部分分离出来,以键值对的形式存入 List
        /// </summary>
        /// <returns></returns>
        private void ParseInput()
        {
            if (rawData[0] != '(')
            {
                throw new ArgumentException("GS1-128 编码必须以小括号括起的 AI 代码开始!");
            }
            aiSet.Clear();
            int           left    = -1; //左括号位置索引
            int           right   = -1; //右括号位置索引
            StringBuilder ai_Num  = new StringBuilder();
            StringBuilder ai_Data = new StringBuilder();

            for (int i = 0; i < rawData.Length; i++)
            {
                if (rawData[i] == '(')
                {
                    left  = i;
                    right = -1;
                    if (ai_Num.Length != 0)
                    {
                        aiSet.Add(new KeyValuePair <string, string>(ai_Num.ToString(), ai_Data.ToString()));
                    }
                    ai_Num.Clear();
                    ai_Data.Clear();
                    continue;
                }
                else if (rawData[i] == ')')
                {
                    right = i;
                    left  = -1;
                    continue;
                }
                if (left != -1 && i > left)
                {
                    ai_Num.Append(rawData[i]);
                }
                if (right != -1 && i > right)
                {
                    ai_Data.Append(rawData[i]);
                }
            }
            aiSet.Add(new KeyValuePair <string, string>(ai_Num.ToString(), ai_Data.ToString()));
            //检查 AI 合法性
            foreach (var pair in aiSet)
            {
                if (!CheckNumericOnly(pair.Key))
                {
                    throw new ArgumentException("小括号中的 AI 代码必须为数字!");
                }
                AI_Struct ai_struct = ais[pair.Key];
                CheckAIData(ai_struct, pair.Value);
                //加入提示
                Errors.Add("(" + ai_struct.AI_Num + "):" + ai_struct.Name);
            }
        }
Example #2
0
 /// <summary>
 /// 检查 AI 数据编码部分是否合法
 /// </summary>
 /// <param name="ai"></param>
 /// <param name="ai_data"></param>
 public void CheckAIData(AI_Struct ai, string ai_data)
 {
     if (ai_data.Length < ai.MinLen || ai_data.Length > ai.MaxLen)
     {
         throw new ArgumentException("AI:" + ai + "的数据编码部分长度不正确!");
     }
     if (ai.Comprise == CharType.Number)
     {
         if (!CheckNumericOnly(ai_data))
         {
             throw new ArgumentException("AI:" + ai + "的数据编码部分只能为数字!");
         }
     }
     else
     {
         foreach (char c in ai_data)
         {
             if (!CheckChar(c))
             {
                 throw new ArgumentException("AI:" + ai + "的数据编码部分存在非法字符!");
             }
         }
     }
 }