一个图书ISBN号的验证方法,貌似,这应该是到目前为止自己独立写的最长的一个方法吧。
这几天,构思,查资料,请教前辈……
不容易,终于还是完成了。
总结:不错!嘎嘎O(∩_∩)O哈哈~
下面是源代码
bool CheckISBN(string isbn)
{
if (isbn.Length > 17)
{
return false;
}
else
{
//13位数ISBN(包括"-"共17个字符)
if(isbn.Length==17)
{
if (isbn.Substring(0, 3) != "978" && isbn.Substring(0, 3) != "979")//从0开始
{
return false;
}
else if (isbn.Substring(4, 1) != "7")
{
return false;
}
else
{
string isbnText = isbn.Replace("-", "");
int sun = 0;//总和
for (int i = 0; i < 12; i++)
{
int n = 0;//奇数时
int m = 0;//偶数位时
if (i % 2 == 0)//因为位置排列从0开始,第0位是奇数位,所以求奇数位的值引用偶数算法
{
n = int.Parse(isbnText.Substring(i, 1)) * 1;
}
if (i % 2 != 0)
{
m = int.Parse(isbnText.Substring(i, 1)) * 3;
}
sun = sun + n + m;
}
int mod = 10 - sun % 10;//求10-(mod 10)
if (int.Parse(isbn.Substring(16, 1)) == mod)
{
return true;
}
else
{
return false;
}
}
}
//10位数ISBN(包括"-"共13个字符)
if (isbn.Length == 13)
{
if (isbn.Substring(0, 1) != "7")
{
return false;
}
else
{
string isbnText = isbn.Replace("-", "");
int sun = 0;
//第0位 * 10 + 第二位 * 9 + …… + 第九位 * 2 类推结束
for (int i = 0, j = 10; i < 9; i++, j--)
{
sun = sun + int.Parse(isbnText.Substring(i, 1)) * j;
}
int mod = (11 - sun % 11) % 11;// (11-sun模数11)再模数11
if (int.Parse(isbn.Substring(12, 1)) == mod)
{
return true;
}
else
{
return false;
}
}
}
else
{
return false;
}
}
}