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); } }
public static decimal CalculateControlDigit(decimal number, SaderatBillControlDigitModeEnum mode, out Exception exData) { return(CalculateControlDigit(number.ToString(), mode, out exData)); }