2. 計算 ISBN 檢查號

namespace Q2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 957857358
            var str = textBox1.Text.Replace("-", "");
            if (str.Length != 9 || str.Any(e => !Char.IsDigit(e)))
            {
                textBox2.Text = "";
                textBox3.Text = "輸入號碼不對";
                return;
            }

            string pa;
            var k = str;
            if (!k.StartsWith("957") && !k.StartsWith("986"))
            {
                textBox2.Text = "";
                textBox3.Text = "輸入號碼不對";
                return;
            }
            pa = k.Substring(0, 3);
            k = k.Substring(3);

            string? pb = null;
            foreach (var item in "157、204、421、442、7198、7323、8573".Split("、"))
            {
                if (k.StartsWith(item))
                {
                    pb = item;
                    k = k.Substring(item.Length);
                    break;
                }
            }
            if (pb == null)
            {
                textBox2.Text = "";
                textBox3.Text = "輸入號碼不對";
                return;
            }


            var sum = str.ToCharArray().Select((e, i) =>
            {
                return (10 - i) * (e - '0');
            }).Sum();
            var N = 11 - sum % 11;

            var i10 =
              pa + "-" +
                pb + "-" +
                str[(pa.Length + pb.Length)..9] +
                "-" +
                (N == 10 ? "X" : N == 11 ? "0" : N);
            textBox2.Text = i10;

            var isbn13 = "978" + str;
            sum = isbn13.Select((e, i) => (e - '0') * (i % 2 == 0 ? 1 : 3)).Sum();
            var m = sum % 10;
            isbn13 += m == 0 ? 0 : 10 - m;

            textBox3.Text = isbn13[0..3] + "-" +
              pa + "-" +
               pb + "-" +
                isbn13[(pa.Length + pb.Length + 3)..12] + "-" +
                isbn13[12];
        }
    }
}

Last updated