EAN•UCC
前缀 组区号 出版者号 出版序号 校验码
1、取ISBN前12位
数字
9 7 8 7 5 0 6 4 2 5 9 5 ?
2、取各位数字所
对应的加权值
1 3 1 3 1 3 1 3 1 3 1 3
3、将各位数字与
其相对应的加权值依次相乘
9 21 8 21 5 0 6 12 2 15 9 15
4、将乘积相加,
得出和数 123
5、用和数除以模数10,得出余数 123÷10=12……3
6、模数10减余数,所得差即为校验码 10-3=7
7、将所得校验码放在构成中国标准书号的基本数字的末端 978-7-5064-2595-7
8、如果步骤5所得余数为0,则校验码为0。求各位老师给写一个算法,非常感谢。
前缀 组区号 出版者号 出版序号 校验码
1、取ISBN前12位
数字
9 7 8 7 5 0 6 4 2 5 9 5 ?
2、取各位数字所
对应的加权值
1 3 1 3 1 3 1 3 1 3 1 3
3、将各位数字与
其相对应的加权值依次相乘
9 21 8 21 5 0 6 12 2 15 9 15
4、将乘积相加,
得出和数 123
5、用和数除以模数10,得出余数 123÷10=12……3
6、模数10减余数,所得差即为校验码 10-3=7
7、将所得校验码放在构成中国标准书号的基本数字的末端 978-7-5064-2595-7
8、如果步骤5所得余数为0,则校验码为0。求各位老师给写一个算法,非常感谢。
解决方案 »
- 特别简单基础的xml问题!!!
- 指定的类型必须是不包含引用的结构。
- 复制文件技巧问题。。。
- datagridivew 列与列之间拖动(移动)的方法?
- 请问有没有办法可以动态生成DataTable的表结构?请大家帮帮忙,尤其是斑竹大人,谢谢
- datagrid的问题,在线急等ing
- 谁能告诉我怎么使用jmail的jmail.POP3Class的Connect方法怎么使用的?
- long型数值如何转换成各种时间格式?
- 怎么得到程序自身所在的路径?问题2.推荐有关Excel编程方面的书!
- 在C#中如何打印一个Form?
- 请问,在WindowsXP下如何学习WPF编程?
- 高分请教C#中A、B、C三个窗体显示调用问题!
public char ISBN(string ANumbers)
{
int vSum = 0; // 合计值
int i = 1; // 加权值
foreach (char vChar in ANumbers)
{
if ("0123456789".IndexOf(vChar) < 0) continue; // 非数字
vSum += (vChar - '0') * i;
i = i == 1 ? 3 : 1; // if (i == 1) i = 13; else i = 1;
}
return "01234567890"[10 - vSum % 10];
}private void button1_Click(object sender, EventArgs e)
{
Text = ISBN("978750642595").ToString();
}
后取第2位、第4位、第6位、第8位、第10位、第12位的和乘以3。
我不知道用什么方法取,我是新手。望各位老师给一个代码,先谢了。
using System.Text.RegularExpressions;namespace BarCode
{
/// <summary>
/// Summary description for BarCode2ISBN.
/// </summary>
public class BarCode2ISBN
{
public BarCode2ISBN()
{
//
// TODO: Add constructor logic here
//
}
#region ISBN_BarCode
//条码 转 ISBN:
//条码示例:9787508027104 前三位978(中国)
// 1. 除去前三位及最后一位(4),剩下7 5 0 8 0 2 7 1 0(A)
// 2. 高位 -> 低位(分别乘以10,9,8..3,2),即7*10,5*9,0*8...1*3,0*2。
// 3. 求和:70 45 0 56 0 10 28 3 0 = 212;
// 4. 和除以11: 212 % 11 余3
// 5. 余数3取11的补数:11 - 3 = 8;(8即为校验位)
// 注:当余数为0时,校验位为 0,余数为1时,补数为10,此时用符号X代替。
// 6. 结果ISBN的书号为:A值加检验位8,即得:7 5 0 8 0 2 7 1 0 8
public string BarCodeToISBN(string barCode)
{
if(barCode.Length != 13) return string.Empty;
if(!Regex.IsMatch(barCode, @"\d{13}")) return string.Empty;
string coreCode = barCode.Substring(3, 9);
int sum = 0;
for(int i = 10; i >= 2; i--)
{
sum += i * Convert.ToInt32(coreCode.Substring(10 - i,1));
}
string checkCode = null;
if(sum % 11 == 0)
{
checkCode = "0";
}
else if(sum % 11 == 1)
{
checkCode = "X";
}
else
{
checkCode = (11 - (sum % 11)).ToString();
}
return coreCode + checkCode;
} //ISBN 转 条码:
//示范数据:7-5080-2710-8
// 1. 去掉末尾校验码8,前面统一加上978(中国),为:978750802710
// 2. 从代码位置序号2开始,所有偶数位的数字代码求和为a, 7 + 7 + 0 + 0 + 7 + 0 = 21
// 3. 将a乘以3为a, 21 * 3 = 63
// 4. 从代码位置序号1开始,所有奇数位的数字代码求和为b,9 + 8 + 5 + 8 + 2 + 1 = 33
// 5. 将a和b相加为c, 63 + 33 = 96
// 6. 取c的个位数d。 个位:6
// 7. 用10减去d即为校验位数值,将它置于最后一位。10 - 6 = 4
// 8. 条形码为:9 7 8 7 5 0 8 0 2 7 1 0 4
public string ISBNToBarCode(string isbnCode)
{
isbnCode = isbnCode.Replace("-", string.Empty);
if(isbnCode.Length != 10) return string.Empty;
if(!Regex.IsMatch(isbnCode, @"\d{10}")) return string.Empty;
string coreCode = isbnCode.Substring(0, 9);
string chinaIsbnCode = "978";
string tmpCode = chinaIsbnCode + coreCode;
int sumOddNumber = 0;//奇数和
int sumEvenNumber = 0;//偶数和
for(int i = 0; i < 12; i++)
{
if( (i + 1) % 2 == 1)
{
sumOddNumber += Convert.ToInt32(tmpCode.Substring(i, 1));
}
else
{
sumEvenNumber += Convert.ToInt32(tmpCode.Substring(i, 1));
}
} int sum = sumOddNumber + sumEvenNumber * 3;
string checkCode = null;
if(sum % 10 == 0)
{
checkCode = "0";
}
else
{
checkCode = (10 - (sum % 10)).ToString();
} return tmpCode + checkCode;
}
#endregion
}
}来自: 大可山的博客(http://blog.csdn.net/johnsuna/) 本文参考:http://blog.csdn.net/johnsuna/archive/2006/01/12/577511.aspx