使用java编写校验isbn的代码?
时间: 2024-03-02 16:49:36 浏览: 96
以下是使用Java编写校验ISBN的代码示例:
```java
public static boolean isValidISBN(String isbn) {
// 判断输入的ISBN是否为空或长度不为10
if (isbn == null || isbn.length() != 10) {
return false;
}
// 计算校验和
int sum = 0;
for (int i = 0; i < 10; i++) {
char c = isbn.charAt(i);
if (!Character.isDigit(c)) {
return false;
}
sum += (c - '0') * (10 - i);
}
// 判断是否符合校验规则
return sum % 11 == 0;
}
```
使用方法:
```java
String isbn = "1234567890";
if (isValidISBN(isbn)) {
System.out.println(isbn + " 是合法的ISBN号码。");
} else {
System.out.println(isbn + " 不是合法的ISBN号码。");
}
```
输出结果:
```
1234567890 是合法的ISBN号码。
```
相关问题
使用SpringMVC编写代码实现图书的新增功能 1.编写视图层JSP代码,页面提供表单,由用户填写图书名称,出版社,出版日期,作者,定价,ISBN并提交。 2.编写控制层Java代码,获取视图层提交的表单请求,控制方法注入表单项参数,控制层完成JavaBean封装和业务层代码调用。 3.编写业务层Java代码,将控制层传输的JavaBean进行非空校验然后调用持久层代码。 4.编写持久层Java代码,将经过控制层校验的JavaBean转换成SQL语句并向MySQL数据库Test的book表插入一条新增记录。 5.编写视图层JSP代码,显示新增成功或者失败及失败原因。 其中,Test数据库的book表结构如下表1所示: 表1:book表结构 字段ID 字段名称 字段类型 约束 bookId 图书编号 int 非空,自增长,主键 bookName 图书名称 varchar(30) 非空 press 出版社 varchar(20) 非空 pressDate 出版日期 date 非空,不晚于当前时间 author 作者 varchar(10) 非空 price 定价 money 非空 ISBN ISBN char(13) 非空 注意事项: 1.页面表单不需要填写图书编号,而交给数据库自增长生成编号。 2.持久层代码使用JDBC完成,允许使用ORM框架。 3.必须使用SpringMVC框架,可以使用Spring的IoC。
下面是代码实现:
1. 编写视图层JSP代码,页面提供表单
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增图书</title>
</head>
<body>
<h2>新增图书</h2>
<form action="addBook" method="post">
<label>图书名称:</label>
<input type="text" name="bookName" required><br>
<label>出版社:</label>
<input type="text" name="press" required><br>
<label>出版日期:</label>
<input type="date" name="pressDate" required><br>
<label>作者:</label>
<input type="text" name="author" required><br>
<label>定价:</label>
<input type="number" name="price" required><br>
<label>ISBN:</label>
<input type="text" name="ISBN" required><br>
<input type="submit" value="提交">
</form>
</body>
</html>
```
2. 编写控制层Java代码,获取视图层提交的表单请求,控制方法注入表单项参数,控制层完成JavaBean封装和业务层代码调用。
```java
@Controller
public class BookController {
@Autowired
private BookService bookService;
@RequestMapping("/addBook")
public ModelAndView addBook(@RequestParam("bookName") String bookName,
@RequestParam("press") String press, @RequestParam("pressDate") Date pressDate,
@RequestParam("author") String author, @RequestParam("price") BigDecimal price,
@RequestParam("ISBN") String ISBN) {
Book book = new Book();
book.setBookName(bookName);
book.setPress(press);
book.setPressDate(pressDate);
book.setAuthor(author);
book.setPrice(price);
book.setISBN(ISBN);
String result = bookService.addBook(book);
ModelAndView modelAndView = new ModelAndView();
if(result == null) {
modelAndView.setViewName("add_result");
modelAndView.addObject("result", "添加成功");
} else {
modelAndView.setViewName("add_result");
modelAndView.addObject("result", "添加失败,原因:" + result);
}
return modelAndView;
}
}
```
3. 编写业务层Java代码,将控制层传输的JavaBean进行非空校验然后调用持久层代码。
```java
@Service
public class BookService {
@Autowired
private BookDao bookDao;
public String addBook(Book book) {
if(book.getBookName() == null || book.getBookName().equals("")) {
return "图书名称不能为空";
}
if(book.getPress() == null || book.getPress().equals("")) {
return "出版社不能为空";
}
if(book.getPressDate() == null || book.getPressDate().after(new Date())) {
return "出版日期不能为空且不能晚于当前时间";
}
if(book.getAuthor() == null || book.getAuthor().equals("")) {
return "作者不能为空";
}
if(book.getPrice() == null || book.getPrice().compareTo(BigDecimal.ZERO) <= 0) {
return "定价不能为空且必须大于0";
}
if(book.getISBN() == null || book.getISBN().equals("")) {
return "ISBN不能为空";
}
try {
bookDao.addBook(book);
return null;
} catch(Exception e) {
e.printStackTrace();
return "数据库异常";
}
}
}
```
4. 编写持久层Java代码,将经过控制层校验的JavaBean转换成SQL语句并向MySQL数据库Test的book表插入一条新增记录。
```java
@Repository
public class BookDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void addBook(Book book) {
String sql = "insert into book(bookName, press, pressDate, author, price, ISBN) values (?, ?, ?, ?, ?, ?)";
jdbcTemplate.update(sql, book.getBookName(), book.getPress(), book.getPressDate(), book.getAuthor(), book.getPrice(), book.getISBN());
}
}
```
5. 编写视图层JSP代码,显示新增成功或者失败及失败原因。
```jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>新增结果</title>
</head>
<body>
<h2>${result}</h2>
<a href="addBookPage">返回</a>
</body>
</html>
```
注意事项:
1. 页面表单不需要填写图书编号,而交给数据库自增长生成编号。
2. 持久层代码使用JDBC完成,允许使用ORM框架。
3. 必须使用SpringMVC框架,可以使用Spring的IoC。
提交要求:
1. 使用eclipseForJavaEE进行开发。
2. 将代码打包成war包并上传至服务器,提供war包下载链接。
3. 提供MySQL数据库Test的book表结构及插入数据的SQL语句。
MySQL数据库Test的book表结构及插入数据的SQL语句如下:
```sql
CREATE TABLE `book` (
`bookId` int(11) NOT NULL AUTO_INCREMENT COMMENT '图书编号',
`bookName` varchar(30) NOT NULL COMMENT '图书名称',
`press` varchar(20) NOT NULL COMMENT '出版社',
`pressDate` date NOT NULL COMMENT '出版日期',
`author` varchar(10) NOT NULL COMMENT '作者',
`price` decimal(10,2) NOT NULL COMMENT '定价',
`ISBN` char(13) NOT NULL COMMENT 'ISBN',
PRIMARY KEY (`bookId`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='图书';
```
java设计一个13位ISBN书号校验程序。13位ISBN的校验码计算规则是这样的:前12位数依次乘以1和3,然后求它们的和除以10的余数,最后用10减去这个余数,就得到了校验码(最后一位数字)。如果余数为0,则校验码为0。 比如,ISBN:9787302222224,它的校验码计算方法如下:
好的,根据您的要求,我来为您编写一个Java程序,用于计算13位ISBN的校验码。下面是程序的代码:
```java
import java.util.Scanner;
public class ISBNChecker {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入12位的ISBN号码:");
String isbn = input.nextLine();
if (isbn.length() != 12) {
System.out.println("您输入的ISBN号码有误,请重新输入!");
return;
}
int sum = 0;
for (int i = 0; i < isbn.length(); i++) {
int num = Character.getNumericValue(isbn.charAt(i));
if (i % 2 == 0) {
sum += num;
} else {
sum += num * 3;
}
}
int remainder = sum % 10;
int checksum = 10 - remainder;
if (checksum == 10) {
checksum = 0;
}
System.out.println("ISBN号码:" + isbn + checksum);
}
}
```
您只需要将上述代码复制到Java开发环境中,然后编译运行即可。程序会提示您输入12位的ISBN号码,然后计算出校验码并输出完整的13位ISBN号码。
阅读全文