Isbn генерирует контрольную цифру - PullRequest
0 голосов
/ 02 сентября 2010

Этот код проверяет, действителен ли ISBN.Для ввода из девяти цифр я хотел бы сформировать действительный ISBN, рассчитав и добавив контрольную цифру.Для ввода менее девяти цифр, я хотел бы, чтобы он возвращал сообщение об ошибке «Пожалуйста, введите правильный номер».Как мне поступить об этом?

   public class isbn
    {   //attributes
         private string isbnNum;
         //method   
         public string GetIsbn()
         {
             return this.isbnNum;
         }
           //constructor
           public isbn()
           {
               Console.Write("Enter Your ISBN Number: ");
               this.isbnNum = Console.ReadLine();

           }//end default constructor

            //method
           public string displayISBN()
           {

               return  this.GetIsbn();

           }


       public static void Main(string[] args)
        {
            //create a new instance of the ISBN/book class

            isbn myFavoriteBook = new isbn();

            //contains the method for checking validity 
            bool isValid = CheckDigit.CheckIsbn(myFavoriteBook.GetIsbn());

            //print out the results of the validity.
            Console.WriteLine(string.Format("Your book {0} a valid ISBN",
                                       isValid ? "has" : "doesn't have"));

            Console.ReadLine();

        }

public static class CheckDigit
{       // attributes
    public static string NormalizeIsbn(string isbn)
    {
        return isbn.Replace("-", "").Replace(" ", "");
    }
   public static bool CheckIsbn(string isbn) // formula to check ISBN's validity
    {
        if (isbn == null)
            return false;

        isbn = NormalizeIsbn (isbn);
        if (isbn.Length != 10)
            return false;

        int result;
        for (int i = 0; i < 9; i++)
            if (!int.TryParse(isbn[i].ToString(), out result))
                return false;

        int sum = 0;
        for (int i = 0; i < 9; i++)
            sum += (i + 1) * int.Parse(isbn[i].ToString());

        int remainder = sum % 11;
        if (remainder == 10)
            return isbn[9] == 'X';
        else
            return isbn[9] == (char)('0' + remainder);
    }

1 Ответ

3 голосов
/ 03 сентября 2010

Просто измените его, чтобы добавить последний символ, вместо проверки его присутствия. Вышеприведенное можно немного исправить, но просто изменив его по мере необходимости, получим:

public static string MakeIsbn(string isbn) // string must have 9 digits
{
    if (isbn == null)
        throw new ArgumentNullException();

    isbn = NormalizeIsbn (isbn);
    if (isbn.Length != 9)
        throw new ArgumentException();

    int result;
    for (int i = 0; i != 9; i++)
        if (!int.TryParse(isbn[i].ToString(), out result))
            throw new ArgumentException()

    int sum = 0;
    for (int i = 0; i != 9; i++)
        sum += (i + 1) * int.Parse(isbn[i].ToString());

    int remainder = sum % 11;
    if (remainder == 10)
        return isbn + 'X';
    else
        return isbn + (char)('0' + remainder);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...