示例#1
0
        public FailureIdEncoderResponse FailureIdEncoder(string HpSerialNumber, string FailureCode, DateTime StartDate, DateTime TestDate)
        {
            FailureIdEncoderResponse response = new FailureIdEncoderResponse();
            FailureIdInterchange     fi       = new FailureIdInterchange();


            if (string.IsNullOrEmpty(FailureCode))
            {
                response.ErrorList.Add(Faults.EmptyFailureCode);
                return(response);
            }

            if (StartDate == null || StartDate == DateTime.MinValue)
            {
                response.ErrorList.Add(Faults.InvalidStartDate);
                return(response);
            }

            if (TestDate == null || TestDate == DateTime.MinValue)
            {
                response.ErrorList.Add(Faults.InvalidTestDate);
                return(response);
            }

            fi.FailureIdStartDate = StartDate;
            fi.TestDate           = TestDate;
            fi.FailureIdVersion   = FailureIdConstant.Version3.ToString();
            fi.FailureCode        = FailureCode;
            fi.HpSerialNumber     = HpSerialNumber;
            EncodeWarrantyInfo(fi);

            if (!string.IsNullOrEmpty(fi.FailureIdTag))
            {
                response.FailureId = fi.FailureIdTag;
            }
            else
            {
                response.ErrorList.Add(Faults.FailedToGenerateId);
            }

            return(response);
        }
示例#2
0
        private void EncodeWarrantyInfo(FailureIdInterchange wi)
        {
            byte[] ENCArray = new byte[13];

            char[] HPSN         = wi.HpSerialNumber.ToCharArray();
            int[]  HPSNuEncoded = new int[HPSN.Length];

            for (int i = 0; i < HPSN.Length; i++)
            {
                HPSNuEncoded[i] = FailureIdConstant.alphaRandomV2[HPSN[i]];
            }

            // Split and encode Warranty Start Date
            int[] WSTRTEncoded = new int[2];
            WSTRTEncoded[0] = wi.FailureIdStartDate.Year - FailureIdConstant.YEAR_DEFAULT;
            WSTRTEncoded[1] = wi.FailureIdStartDate.DayOfYear;

            // Split and encode Test Date
            int[] TSTDTEncoded = new int[2];
            TSTDTEncoded[0] = wi.TestDate.Year - FailureIdConstant.YEAR_DEFAULT;
            TSTDTEncoded[1] = wi.TestDate.DayOfYear;

            // Split and encode Failure Code
            //int[] FAILREncoded = new int[1];
            //int iFCode = Convert.ToInt32(wi.FailureCode);
            //int FAILREncoded = Convert.ToInt32(wi.FailureCode);
            int FAILREncoded = int.Parse(wi.FailureCode, System.Globalization.NumberStyles.HexNumber);

            int iFRUBefore = (FAILREncoded & 0xFF00);
            int iFRU       = iFRUBefore >> 8;
            int iError     = (FAILREncoded & 0x00FF);

            byte CHECKSum = FailureIdConstant.GetChecksum(HPSNuEncoded, WSTRTEncoded, TSTDTEncoded, FAILREncoded);

            byte[] WTYTag = new byte[24];

            WTYTag[0]  = (byte)(HPSNuEncoded[5] >> 1);
            WTYTag[1]  = (byte)(((HPSNuEncoded[5] << 4) & 0x10) | (HPSNuEncoded[6] >> 2));
            WTYTag[2]  = (byte)(((HPSNuEncoded[6] << 3) & 0x18) | (HPSNuEncoded[7] >> 3));
            WTYTag[3]  = (byte)(((HPSNuEncoded[7] << 2) & 0x1C) | (HPSNuEncoded[8] >> 4));
            WTYTag[4]  = (byte)(((HPSNuEncoded[8] << 1) & 0x1E) | (HPSNuEncoded[9] >> 5));
            WTYTag[5]  = (byte)(HPSNuEncoded[9] & 0x1F);
            WTYTag[6]  = (byte)(WSTRTEncoded[0] >> 1);
            WTYTag[7]  = (byte)(((WSTRTEncoded[0] << 4) & 0x10) | (WSTRTEncoded[1] >> 5));
            WTYTag[8]  = (byte)(WSTRTEncoded[1] & 0x1F);
            WTYTag[9]  = (byte)(TSTDTEncoded[0] >> 1);
            WTYTag[10] = (byte)(((TSTDTEncoded[0] << 4) & 0x10) | (TSTDTEncoded[1] >> 5));
            WTYTag[11] = (byte)(TSTDTEncoded[1] & 0x1F);
            WTYTag[12] = (byte)(HPSNuEncoded[0] >> 1);
            WTYTag[13] = (byte)(((HPSNuEncoded[0] << 4) & 0x10) | (HPSNuEncoded[1] >> 2));
            WTYTag[14] = (byte)(((HPSNuEncoded[1] << 3) & 0x18) | (HPSNuEncoded[2] >> 3));
            WTYTag[15] = (byte)(((HPSNuEncoded[2] << 2) & 0x1C) | (HPSNuEncoded[3] >> 4));
            WTYTag[16] = (byte)(((HPSNuEncoded[3] << 1) & 0x1E) | (HPSNuEncoded[4] >> 5));
            WTYTag[17] = (byte)(HPSNuEncoded[4] & 0x1F);
            WTYTag[18] = (byte)(FAILREncoded >> 7);
            WTYTag[19] = (byte)((FAILREncoded >> 2) & 0x1F);
            WTYTag[20] = (byte)(((FAILREncoded << 3) & 0x18) | (CHECKSum >> 5));
            WTYTag[21] = (byte)(CHECKSum & 0x1F);
            WTYTag[22] = (byte)(FailureIdConstant.Version3 >> 5);
            WTYTag[23] = (byte)(FailureIdConstant.Version3 & 0x1f);


            StringBuilder sbTag = new StringBuilder();
            // Building first 4 blocks (5 characters)
            int count = 0;

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    sbTag.Append(FailureIdConstant.alphaDefaultV2[WTYTag[j + count]].ToString());
                }
                if (i < 3)
                {
                    sbTag.Append("-");
                    count += 6;
                }
            }

            wi.FailureIdTag = sbTag.ToString();
        }