예제 #1
0
        /// <summary>
        /// 对应的ASCII码范围为32~126,其中32对应的空格sp用来通知生成FNC1分割符
        /// </summary>
        /// <returns></returns>
        protected override bool RawDataCheck()
        {
            this._presentationData = string.Empty;
            string[] tempArray = this._rawData.Split((char)32);//以空格为分隔符将字符串进行分割
            foreach (string ts in tempArray)
            {
                int ptr = 0;
                do
                {
                    string tempStr;
                    ApplicationIdentifier ai = AI.GetAI(ts.Substring(ptr));
                    int residuelength        = ts.Length - ptr; //剩余字符串长度
                    if (ai == null || residuelength < ai.MinLength || (!ai.IsFixedLength && residuelength > ai.MaxLength))
                    {                                           //第三个判定条件:因为不定长,而且经过空格分割,所以此时如果出现剩余字符串长度超出标识符最大长度规定,则认为错误
                        return(false);
                    }
                    else
                    {
                        int length = Math.Min(ai.MaxLength, residuelength);
                        tempStr = ts.Substring(ptr, length);
                        ptr    += length;
                    }
                    if (!AI.IsRight(ai, tempStr))
                    {
                        return(false);
                    }
                    //展示数据加上括号
                    this._presentationData += string.Format("({0}){1}", tempStr.Substring(0, ai.AILength), tempStr.Substring(ai.AILength));

                    #region 修改为遵循预定义长度的AI后面才不加上FNC1,而不是实际定长的就不加上FNC1
                    //if (!ai.IsFixedLength)
                    //{
                    //    tempStr += (char)32;//为不定长AI加上空格,以便生成条形码时确认需要在此部分后面加入分隔符FNC1
                    //}
                    #endregion

                    this._aiList.Add(tempStr);
                }while (ptr < ts.Length);
            }

            //是否要将_aiList进行排序,将预定长的放在前面以符合 先定长后变长 原则
            //如果修改,则需将展示数据部分重新处理

            return(true);
        }
예제 #2
0
        /// <summary>
        /// 判断指定字符串是否是符合指定应用标识规范
        /// </summary>
        /// <param name="ai"></param>
        /// <param name="aiStr"></param>
        /// <returns></returns>
        internal static bool IsRight(ApplicationIdentifier ai, string aiStr)
        {
            //标识符部分,字符串必须以相同的AI开头
            if (!aiStr.StartsWith(ai.AI) || aiStr.Length > ai.MaxLength || aiStr.Length < ai.MinLength)
            {
                return(false);
            }
            //如果AILength与ai对应的AI长度不一致时,还需检验后续几个字符是否是数字
            for (int i = ai.AI.Length; i < ai.AILength; i++)
            {
                if (!char.IsDigit(aiStr[i]))
                {
                    return(false);
                }
            }

            int ptr = ai.AILength;

            for (int i = 0; i < ai.DataWithoutAI.Count; i++)
            {
                DataFormat df = ai.DataWithoutAI[i];
                for (int j = 0; j < df.Length[df.Length.Length - 1]; j++)
                {
                    if ((df.Character == AICharacter.n && !char.IsDigit(aiStr[ptr])) || (byte)aiStr[ptr] < 33 || (byte)aiStr[ptr] > 126)
                    {
                        return(false);
                    }

                    ptr++;
                    if (ptr >= aiStr.Length)
                    {
                        break;
                    }
                }
            }

            return(true);
        }
예제 #3
0
파일: AI.cs 프로젝트: jeanmahai/PublicTools
        /// <summary>  
        /// 判断指定字符串是否是符合指定应用标识规范  
        /// </summary>  
        /// <param name="ai"></param>  
        /// <param name="aiStr"></param>  
        /// <returns></returns>  
        internal static bool IsRight(ApplicationIdentifier ai, string aiStr)
        {
            //标识符部分,字符串必须以相同的AI开头
            if (!aiStr.StartsWith(ai.AI) || aiStr.Length > ai.MaxLength || aiStr.Length < ai.MinLength)
            {
                return false;
            }
            //如果AILength与ai对应的AI长度不一致时,还需检验后续几个字符是否是数字
            for (int i = ai.AI.Length; i < ai.AILength; i++)
            {
                if (!char.IsDigit(aiStr[i]))
                {
                    return false;
                }
            }

            int ptr = ai.AILength;
            for (int i = 0; i < ai.DataWithoutAI.Count; i++)
            {
                DataFormat df = ai.DataWithoutAI[i];
                for (int j = 0; j < df.Length[df.Length.Length - 1]; j++)
                {
                    if ((df.Character == AICharacter.n && !char.IsDigit(aiStr[ptr])) || (byte)aiStr[ptr] < 33 || (byte)aiStr[ptr] > 126)
                    {
                        return false;
                    }

                    ptr++;
                    if (ptr >= aiStr.Length)
                    {
                        break;
                    }
                }
            }

            return true;
        }