/// <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); }
/// <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); }
/// <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; }