예제 #1
0
        public static decimal CalculateControlDigit(string numberStr, SaderatBillControlDigitModeEnum mode, out Exception exData)
        {
            exData = null;
            try
            {
                if (String.IsNullOrWhiteSpace(numberStr) ||
                    String.IsNullOrEmpty(numberStr))
                {
                    throw new Exception("عددی برای کنترل یافت نشد!");
                }

                decimal sum             = 0;
                var     counterMultiple = 2;
                var     currentStr      = numberStr;
                while (!String.IsNullOrEmpty(currentStr))
                {
                    var digit = 0;
                    int.TryParse(currentStr.Substring(currentStr.Length - 1, 1), out digit);

                    sum += (digit * counterMultiple);

                    counterMultiple++;
                    if (counterMultiple >= 8)
                    {
                        counterMultiple = 2;
                    }

                    currentStr = currentStr.Substring(0, currentStr.Length - 1);
                }

                var finalMode = sum % 11;

                if ((mode == SaderatBillControlDigitModeEnum.BillController02 ||
                     mode == SaderatBillControlDigitModeEnum.PaymentController02) &&
                    (finalMode == 1 || finalMode == 0))
                {
                    finalMode = 0;
                }
                else if ((mode == SaderatBillControlDigitModeEnum.BillController01 ||
                          mode == SaderatBillControlDigitModeEnum.PaymentController01) &&
                         (finalMode == 1 || finalMode == 0))
                {
                    finalMode = 9;
                }
                else
                {
                    finalMode = 11 - finalMode;
                }

                return(finalMode);
            }
            catch (Exception ex)
            {
                exData = ex;
                return(-1);
            }
        }
예제 #2
0
 public static decimal CalculateControlDigit(decimal number, SaderatBillControlDigitModeEnum mode, out Exception exData)
 {
     return(CalculateControlDigit(number.ToString(), mode, out exData));
 }