1
2 /*
3 Author:EF
4 Email:escms@qq.com
5 Date:08-10-14
6 Desc:计算正确ISBN号,错误则返回为空
7 DEMO:select dbo.isbn('7504536093')
8 */
9
10 CREATE FUNCTION ISBN( @isbn varchar ( 50 ))
11 -- ALTER FUNCTION ISBN(@isbn varchar(50))
12 RETURNS nvarchar ( 50 )
13 AS
14 BEGIN
15 DECLARE @i int
16 DECLARE @sn int
17 DECLARE @endisbn nvarchar ( 50 )
18 SET @endisbn = ''
19
20 IF ( len ( @isbn ) >= 12 and left ( @isbn , 3 ) = ' 978 ' )
21 BEGIN
22 SET @isbn = rtrim ( ltrim ( replace ( @isbn , ' - ' , '' )))
23 SET @isbn = replace ( replace ( @isbn , ' x ' , '' ), ' . ' , '' )
24 IF ( ISNUMERIC ( @isbn ) = 1 and len ( @isbn ) >= 9 )
25 BEGIN
26 SET @sn = cast ( left ( @isbn , 1 ) as int ) +
27 cast ( right ( left ( @isbn , 2 ), 1 ) as int ) * 3 +
28 cast ( right ( left ( @isbn , 3 ), 1 ) as int ) +
29 cast ( right ( left ( @isbn , 4 ), 1 ) as int ) * 3 +
30 cast ( right ( left ( @isbn , 5 ), 1 ) as int ) +
31 cast ( right ( left ( @isbn , 6 ), 1 ) as int ) * 3 +
32 cast ( right ( left ( @isbn , 7 ), 1 ) as int ) +
33 cast ( right ( left ( @isbn , 8 ), 1 ) as int ) * 3 +
34 cast ( right ( left ( @isbn , 9 ), 1 ) as int ) +
35 cast ( right ( left ( @isbn , 10 ), 1 ) as int ) * 3 +
36 cast ( right ( left ( @isbn , 11 ), 1 ) as int ) +
37 cast ( right ( left ( @isbn , 12 ), 1 ) as int ) * 3
38 SET @sn = 10 - ( @sn % 10 )
39 IF @sn = 10
40 SET @sn = 0
41 SET @endisbn = left ( @isbn , 12 ) + cast ( @sn as varchar )
42 END
43 ELSE
44 SET @endisbn = ' Error '
45
46 END
47 IF ( len ( @isbn ) >= 9 and len ( @isbn ) <= 10 and left ( @isbn , 1 ) = ' 7 ' )
48 BEGIN
49 SET @isbn = rtrim ( ltrim ( replace ( @isbn , ' - ' , '' )))
50 SET @isbn = replace ( replace ( @isbn , ' x ' , '' ), ' . ' , '' )
51 IF ( ISNUMERIC ( @isbn ) = 1 and len ( @isbn ) >= 9 )
52 BEGIN
53 SET @sn = cast ( right ( left ( @isbn , 1 ), 1 ) as int ) * 10 +
54 cast ( right ( left ( @isbn , 2 ), 1 ) as int ) * 9 +
55 cast ( right ( left ( @isbn , 3 ), 1 ) as int ) * 8 +
56 cast ( right ( left ( @isbn , 4 ), 1 ) as int ) * 7 +
57 cast ( right ( left ( @isbn , 5 ), 1 ) as int ) * 6 +
58 cast ( right ( left ( @isbn , 6 ), 1 ) as int ) * 5 +
59 cast ( right ( left ( @isbn , 7 ), 1 ) as int ) * 4 +
60 cast ( right ( left ( @isbn , 8 ), 1 ) as int ) * 3 +
61 cast ( right ( left ( @isbn , 9 ), 1 ) as int ) * 2
62
63 SET @sn = 11 - ( @sn % 11 )
64 IF @sn = 10
65 SET @endisbn = left ( @isbn , 9 ) + ' X '
66 ELSE
67 BEGIN
68 IF @sn = 11
69 SET @endisbn = left ( @isbn , 9 ) + ' 0 '
70 ELSE
71 SET @endisbn = left ( @isbn , 9 ) + cast ( @sn as varchar )
72 END
73 END
74 ELSE
75 SET @endisbn = ' Error '
76
77 END
78 IF @endisbn = ''
79 SET @endisbn = @isbn
80
81 RETURN @endisbn
82 END
2 /*
3 Author:EF
4 Email:escms@qq.com
5 Date:08-10-14
6 Desc:计算正确ISBN号,错误则返回为空
7 DEMO:select dbo.isbn('7504536093')
8 */
9
10 CREATE FUNCTION ISBN( @isbn varchar ( 50 ))
11 -- ALTER FUNCTION ISBN(@isbn varchar(50))
12 RETURNS nvarchar ( 50 )
13 AS
14 BEGIN
15 DECLARE @i int
16 DECLARE @sn int
17 DECLARE @endisbn nvarchar ( 50 )
18 SET @endisbn = ''
19
20 IF ( len ( @isbn ) >= 12 and left ( @isbn , 3 ) = ' 978 ' )
21 BEGIN
22 SET @isbn = rtrim ( ltrim ( replace ( @isbn , ' - ' , '' )))
23 SET @isbn = replace ( replace ( @isbn , ' x ' , '' ), ' . ' , '' )
24 IF ( ISNUMERIC ( @isbn ) = 1 and len ( @isbn ) >= 9 )
25 BEGIN
26 SET @sn = cast ( left ( @isbn , 1 ) as int ) +
27 cast ( right ( left ( @isbn , 2 ), 1 ) as int ) * 3 +
28 cast ( right ( left ( @isbn , 3 ), 1 ) as int ) +
29 cast ( right ( left ( @isbn , 4 ), 1 ) as int ) * 3 +
30 cast ( right ( left ( @isbn , 5 ), 1 ) as int ) +
31 cast ( right ( left ( @isbn , 6 ), 1 ) as int ) * 3 +
32 cast ( right ( left ( @isbn , 7 ), 1 ) as int ) +
33 cast ( right ( left ( @isbn , 8 ), 1 ) as int ) * 3 +
34 cast ( right ( left ( @isbn , 9 ), 1 ) as int ) +
35 cast ( right ( left ( @isbn , 10 ), 1 ) as int ) * 3 +
36 cast ( right ( left ( @isbn , 11 ), 1 ) as int ) +
37 cast ( right ( left ( @isbn , 12 ), 1 ) as int ) * 3
38 SET @sn = 10 - ( @sn % 10 )
39 IF @sn = 10
40 SET @sn = 0
41 SET @endisbn = left ( @isbn , 12 ) + cast ( @sn as varchar )
42 END
43 ELSE
44 SET @endisbn = ' Error '
45
46 END
47 IF ( len ( @isbn ) >= 9 and len ( @isbn ) <= 10 and left ( @isbn , 1 ) = ' 7 ' )
48 BEGIN
49 SET @isbn = rtrim ( ltrim ( replace ( @isbn , ' - ' , '' )))
50 SET @isbn = replace ( replace ( @isbn , ' x ' , '' ), ' . ' , '' )
51 IF ( ISNUMERIC ( @isbn ) = 1 and len ( @isbn ) >= 9 )
52 BEGIN
53 SET @sn = cast ( right ( left ( @isbn , 1 ), 1 ) as int ) * 10 +
54 cast ( right ( left ( @isbn , 2 ), 1 ) as int ) * 9 +
55 cast ( right ( left ( @isbn , 3 ), 1 ) as int ) * 8 +
56 cast ( right ( left ( @isbn , 4 ), 1 ) as int ) * 7 +
57 cast ( right ( left ( @isbn , 5 ), 1 ) as int ) * 6 +
58 cast ( right ( left ( @isbn , 6 ), 1 ) as int ) * 5 +
59 cast ( right ( left ( @isbn , 7 ), 1 ) as int ) * 4 +
60 cast ( right ( left ( @isbn , 8 ), 1 ) as int ) * 3 +
61 cast ( right ( left ( @isbn , 9 ), 1 ) as int ) * 2
62
63 SET @sn = 11 - ( @sn % 11 )
64 IF @sn = 10
65 SET @endisbn = left ( @isbn , 9 ) + ' X '
66 ELSE
67 BEGIN
68 IF @sn = 11
69 SET @endisbn = left ( @isbn , 9 ) + ' 0 '
70 ELSE
71 SET @endisbn = left ( @isbn , 9 ) + cast ( @sn as varchar )
72 END
73 END
74 ELSE
75 SET @endisbn = ' Error '
76
77 END
78 IF @endisbn = ''
79 SET @endisbn = @isbn
80
81 RETURN @endisbn
82 END
输入9~10位ISBN号可计算出10位正确的ISBN号。
输入11~14位ISBN号可计算出13位正确的ISBN号。
用于校检和规范ISBN号。
C#版:
1
2 private void button1_Click( object sender, EventArgs e)
3 {
4 if (textBox1.Text == "" || textBox1.Text.Length > 15 )
5 {
6 MessageBox.Show( " 书号输入不正确! " , " 错误 " );
7 return ;
8 }
9 try
10 {
11 string isbnstr;
12 int isbns;
13 isbnstr = textBox1.Text.Trim();
14 isbnstr = isbnstr.Replace( " - " , "" ).Replace( " X " , "" ).Replace( " . " , "" );
15 if (isbnstr.Length >= 11 && isbnstr.Length <= 14 )
16 {
17 isbns = 0 ;
18 isbns += Convert.ToInt32(isbnstr.Substring( 0 , 1 )) * 1 ;
19 isbns += Convert.ToInt32(isbnstr.Substring( 1 , 1 )) * 3 ;
20 isbns += Convert.ToInt32(isbnstr.Substring( 2 , 1 )) * 1 ;
21 isbns += Convert.ToInt32(isbnstr.Substring( 3 , 1 )) * 3 ;
22 isbns += Convert.ToInt32(isbnstr.Substring( 4 , 1 )) * 1 ;
23 isbns += Convert.ToInt32(isbnstr.Substring( 5 , 1 )) * 3 ;
24 isbns += Convert.ToInt32(isbnstr.Substring( 6 , 1 )) * 1 ;
25 isbns += Convert.ToInt32(isbnstr.Substring( 7 , 1 )) * 3 ;
26 isbns += Convert.ToInt32(isbnstr.Substring( 8 , 1 )) * 1 ;
27 isbns += Convert.ToInt32(isbnstr.Substring( 9 , 1 )) * 3 ;
28 isbns += Convert.ToInt32(isbnstr.Substring( 10 , 1 )) * 1 ;
29 isbns += Convert.ToInt32(isbnstr.Substring( 11 , 1 )) * 3 ;
30 isbns = 10 - (isbns % 10 );
31 if (isbns == 10 ) { isbns = 0 ; }
32 textBox2.Text = isbnstr.Substring( 0 , 12 ) + isbns.ToString();
33 }
34 else if (isbnstr.Length >= 9 && isbnstr.Length <= 10 )
35 {
36 isbns = 0 ;
37 isbns += Convert.ToInt32(isbnstr.Substring( 0 , 1 )) * 10 ;
38 isbns += Convert.ToInt32(isbnstr.Substring( 1 , 1 )) * 9 ;
39 isbns += Convert.ToInt32(isbnstr.Substring( 2 , 1 )) * 8 ;
40 isbns += Convert.ToInt32(isbnstr.Substring( 3 , 1 )) * 7 ;
41 isbns += Convert.ToInt32(isbnstr.Substring( 4 , 1 )) * 6 ;
42 isbns += Convert.ToInt32(isbnstr.Substring( 5 , 1 )) * 5 ;
43 isbns += Convert.ToInt32(isbnstr.Substring( 6 , 1 )) * 4 ;
44 isbns += Convert.ToInt32(isbnstr.Substring( 7 , 1 )) * 3 ;
45 isbns += Convert.ToInt32(isbnstr.Substring( 8 , 1 )) * 2 ;
46 isbns = 11 - (isbns % 11 );
47 if (isbns == 10 ) {
48 textBox2.Text = isbnstr.Substring( 0 , 9 ) + " X " ;
49 }
50 else if (isbns == 11 )
51 { textBox2.Text = isbnstr.Substring( 0 , 9 ) + " 0 " ; }
52 else
53 {
54 textBox2.Text = isbnstr.Substring( 0 , 9 ) + isbns.ToString();
55 }
56 }
57 else {
58 MessageBox.Show( " 不可识别的ISBN号 " , " 错误 " );
59 return ;
60 }
61 }
62 catch
63 {
64 MessageBox.Show( " 不可识别的ISBN号 " , " 错误 " );
65 return ;
66 }
67
68
69 }
70
2 private void button1_Click( object sender, EventArgs e)
3 {
4 if (textBox1.Text == "" || textBox1.Text.Length > 15 )
5 {
6 MessageBox.Show( " 书号输入不正确! " , " 错误 " );
7 return ;
8 }
9 try
10 {
11 string isbnstr;
12 int isbns;
13 isbnstr = textBox1.Text.Trim();
14 isbnstr = isbnstr.Replace( " - " , "" ).Replace( " X " , "" ).Replace( " . " , "" );
15 if (isbnstr.Length >= 11 && isbnstr.Length <= 14 )
16 {
17 isbns = 0 ;
18 isbns += Convert.ToInt32(isbnstr.Substring( 0 , 1 )) * 1 ;
19 isbns += Convert.ToInt32(isbnstr.Substring( 1 , 1 )) * 3 ;
20 isbns += Convert.ToInt32(isbnstr.Substring( 2 , 1 )) * 1 ;
21 isbns += Convert.ToInt32(isbnstr.Substring( 3 , 1 )) * 3 ;
22 isbns += Convert.ToInt32(isbnstr.Substring( 4 , 1 )) * 1 ;
23 isbns += Convert.ToInt32(isbnstr.Substring( 5 , 1 )) * 3 ;
24 isbns += Convert.ToInt32(isbnstr.Substring( 6 , 1 )) * 1 ;
25 isbns += Convert.ToInt32(isbnstr.Substring( 7 , 1 )) * 3 ;
26 isbns += Convert.ToInt32(isbnstr.Substring( 8 , 1 )) * 1 ;
27 isbns += Convert.ToInt32(isbnstr.Substring( 9 , 1 )) * 3 ;
28 isbns += Convert.ToInt32(isbnstr.Substring( 10 , 1 )) * 1 ;
29 isbns += Convert.ToInt32(isbnstr.Substring( 11 , 1 )) * 3 ;
30 isbns = 10 - (isbns % 10 );
31 if (isbns == 10 ) { isbns = 0 ; }
32 textBox2.Text = isbnstr.Substring( 0 , 12 ) + isbns.ToString();
33 }
34 else if (isbnstr.Length >= 9 && isbnstr.Length <= 10 )
35 {
36 isbns = 0 ;
37 isbns += Convert.ToInt32(isbnstr.Substring( 0 , 1 )) * 10 ;
38 isbns += Convert.ToInt32(isbnstr.Substring( 1 , 1 )) * 9 ;
39 isbns += Convert.ToInt32(isbnstr.Substring( 2 , 1 )) * 8 ;
40 isbns += Convert.ToInt32(isbnstr.Substring( 3 , 1 )) * 7 ;
41 isbns += Convert.ToInt32(isbnstr.Substring( 4 , 1 )) * 6 ;
42 isbns += Convert.ToInt32(isbnstr.Substring( 5 , 1 )) * 5 ;
43 isbns += Convert.ToInt32(isbnstr.Substring( 6 , 1 )) * 4 ;
44 isbns += Convert.ToInt32(isbnstr.Substring( 7 , 1 )) * 3 ;
45 isbns += Convert.ToInt32(isbnstr.Substring( 8 , 1 )) * 2 ;
46 isbns = 11 - (isbns % 11 );
47 if (isbns == 10 ) {
48 textBox2.Text = isbnstr.Substring( 0 , 9 ) + " X " ;
49 }
50 else if (isbns == 11 )
51 { textBox2.Text = isbnstr.Substring( 0 , 9 ) + " 0 " ; }
52 else
53 {
54 textBox2.Text = isbnstr.Substring( 0 , 9 ) + isbns.ToString();
55 }
56 }
57 else {
58 MessageBox.Show( " 不可识别的ISBN号 " , " 错误 " );
59 return ;
60 }
61 }
62 catch
63 {
64 MessageBox.Show( " 不可识别的ISBN号 " , " 错误 " );
65 return ;
66 }
67
68
69 }
70