票号自动生成(按照一定的规则)

public static Map<Object, Object> invoiceNumberMap;// 票号
public static final int FOUR_COUNT = 4; // 4位序列号(0001-9999)
static {
invoiceNumberMap = new HashMap<Object, Object>();
}

/**
* 得到新的批次号或编号的序列号(001-999)
* @param map
* @param key
* @return
* @throws Exception
*/
private Object getNewSerial(Object serialNum, int count) throws Exception {
String prefix = "";
if (serialNum == null) {
for (int i = 0; i < count - 1; i++) {
prefix += "0";
}
return prefix + "1";
}
String aSerialNum = serialNum.toString();
for (int i=0; i<aSerialNum.length(); i++) {
if (aSerialNum.charAt(i) == '0') {
prefix += "0";
} else {
break;
}
}
int suffix = Integer.parseInt(aSerialNum.substring(prefix.length())) + 1;
prefix = "";
for (int i=0; i<count - (suffix + "").length(); i++) {
prefix += "0";
}
return prefix + suffix;
}
/**
*
*取收据的票号 生成规则: 例:
*规则:SD+YYYYMMDDD+自增值。示例:201808290003
/

public synchronized String getinNum () throws Exception {
StringBuffer serialNo = new StringBuffer("SD");
serialNo.append(getCurDate());
Object newSearial = this.getNewSerial(invoiceNumberMap.get(serialNo.toString()), FOUR_COUNT);
serialNo.append(newSearial);
addSerialToSerialMapForServiceNo(invoiceNumberMap, serialNo.toString());
return serialNo.toString();
}

private void addSerialToSerialMapForServiceNo(Map<Object, Object> map, String serialNo) {
int index = serialNo.length() - 4;
String key = serialNo.substring(0, index);
String value = serialNo.substring(index + 1);
map.put(key, value);
}

转载于:https://www.cnblogs.com/lingding/p/10475102.html

### 回答1: ```java import java.util.Random; public class TicketNumberGenerator { public static void main(String[] args) { String ticketNumber = ""; Random rand = new Random(); for (int i = 0; i < 10; i++) { ticketNumber += rand.nextInt(10); } System.out.println("Ticket Number: " + ticketNumber); } } ``` 说明: - 使用 `java.util.Random` 类来生成随机数字。 - 使用一个循环来生成10位数字。 - 每次循环中调用`rand.nextInt(10)`来生成0-9之间的随机整数。 - 将每次生成的整数添加到票号字符串中。 - 最后输出票号。 这个代码可以生成10位随机数字的票号,但是由于使用随机数生成,所以可能会有重复的票号。如果需要保证每个票号都是唯一的,可以使用其他方法来生成票号,例如使用UUID。 ### 回答2: 以下是一个使用Java编写的生成随机不重复10位数的票号的代码: ```java import java.util.HashSet; import java.util.Random; import java.util.Set; public class TicketNumberGenerator { public static void main(String[] args) { Set<String> ticketNumbers = generateTicketNumbers(10); System.out.println(ticketNumbers); } public static Set<String> generateTicketNumbers(int count) { Set<String> ticketNumbers = new HashSet<>(); Random random = new Random(); while (ticketNumbers.size() < count) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < 10; i++) { sb.append(random.nextInt(10)); // 生成0-9的随机数字 } ticketNumbers.add(sb.toString()); } return ticketNumbers; } } ``` 这段代码使用了一个`HashSet`来存储生成的不重复票号。通过`Random`类生成0-9的随机数字,并使用`StringBuilder`构建为10位数的票号。当生成的票号数量达到指定的数量时,循环结束并返回生成的票号的集合。最后,通过`main`函数调用`generateTicketNumbers`方法生成10个随机不重复的票号,并打印输出。 ### 回答3: 以下是一个使用Java编写的生成随机不重复10位数票号的代码: ```java import java.util.HashSet; import java.util.Random; import java.util.Set; public class TicketNumberGenerator { private static final int NUM_DIGITS = 10; public static String generateTicketNumber() { StringBuilder ticketNumber = new StringBuilder(); Random random = new Random(); Set<String> generatedNumbers = new HashSet<>(); while (generatedNumbers.size() < Math.pow(10, NUM_DIGITS)) { ticketNumber.setLength(0); for (int i = 0; i < NUM_DIGITS; i++) { ticketNumber.append(random.nextInt(10)); } generatedNumbers.add(ticketNumber.toString()); } String uniqueTicketNumber = ""; while (uniqueTicketNumber.isEmpty()) { uniqueTicketNumber = generatedNumbers.iterator().next(); generatedNumbers.remove(uniqueTicketNumber); } return uniqueTicketNumber; } public static void main(String[] args) { System.out.println("随机不重复的10位数票号:" + generateTicketNumber()); } } ``` 这个代码使用了Random类生成随机数字,并使用StringBuilder类构建票号。为了确保票号不重复,使用了一个HashSet集合来存储已生成的票号,当集合中的元素数量达到Math.pow(10, NUM_DIGITS)时即所有可能的10位数票号都已生成。然后,从集合中取出一个票号作为唯一的票号返回。在main方法中,调用generateTicketNumber()方法并打印结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值