using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QMAPP.FJC.DAL.BZD
{
    class BarcodeRule
    {
        //barcode标识头3位
        private string _barcodeFirst = "052";
        //barcode公司编号3位
        private string _barcodeCompnentCode = "111";
        //车型1位
        private string _VehicleType = "A";
        //配置、颜色1位
        private string _ConfigColor = "3";
        //年1位
        private string _Year = "J";
        //月1位
        private string _Mon = "4";

        //barcode流水号3位
        private string _barcodeSequence = "001";

        public string barcodeFirst
        {
            get { return _barcodeFirst;}
            set { _barcodeFirst = value; }
        }
        //barcode公司编号3位
        public string barcodeCompnentCode
        {
            get { return _barcodeCompnentCode; }
            set { _barcodeCompnentCode = value; }
        }
        //车型1位
        public string VehicleType
        {
            get { return _VehicleType; }
            set { _VehicleType = value; }
        }
        //配置、颜色1位
        public string ConfigColor
        {
            get { return _ConfigColor; }
            set { _ConfigColor = value; }
        }
        //年1位
        public string Year
        {
            get { return _Year; }
            set { _Year = value; }
        }
        //月1位
        public string Mon
        {
            get { return _Mon; }
            set { _Mon = value; }
        }

        public string barcodeSequence
        {
            get { return _barcodeSequence.PadLeft(3, '0'); }
            set { _barcodeSequence = value; }
        }
        
        //将barcode所有字符转为10进制相加,求和
        public int Xsum(string str,int toX)
        {
            int sum = 0;
            for (int i = 0; i < str.Length; i++)
            {
                sum = sum + DecimalToCharX.CharXTodecimal(str[i].ToString(), toX);
            }
            return sum;
        }

        //barcode校验位
        public string getCheckBit(string barcodeTemp)
        {
            int sum = 0;
            int remainder = 0;
            sum = Xsum(barcodeTemp, 43);
            //将求和值除以43,得到余数作为校验位
            remainder = sum % 43;
            //将校验位转为43进制
            return DecimalToCharX.decimalToCharX(remainder, 43);
        }
        public string barcode
        {
            get
            {
                string barcodeTemp = "";
                barcodeTemp = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}",
                    barcodeFirst,
                    " ",
                    barcodeCompnentCode,
                    VehicleType,
                    ConfigColor,
                    Year,
                    Mon,
                    barcodeSequence);//_barcodeFirst + " " + _barcodeCompnentCode + _VehicleType + ConfigColor + _Year  + _Mon  + barcodeSequence;
                return barcodeTemp + getCheckBit(barcodeTemp);
            }
            
        }

    }
}