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