Java根据openid生成一个11位的纯数字userid且不以0开头
时间: 2024-03-15 17:47:56 浏览: 47
好的,针对您的问题,我可以给出以下Java代码示例:
```java
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
public class UserIdGenerator {
public static String generateUserId(String openid) {
String userId = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] messageDigest = md.digest(openid.getBytes());
BigInteger no = new BigInteger(1, messageDigest);
userId = no.toString(10).substring(0, 11);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return ensureNonZeroLeadingDigit(userId);
}
private static String ensureNonZeroLeadingDigit(String userId) {
if (userId.charAt(0) == '0') {
Random random = new Random();
userId = String.valueOf(random.nextInt(9) + 1) + userId.substring(1);
}
return userId;
}
}
```
上述代码中,`generateUserId`方法接收一个openid字符串,使用MD5算法生成一个128位的摘要,将其转换为一个正整数,并截取前11位作为userid。然后使用`ensureNonZeroLeadingDigit`方法确保userid不以0开头,如果以0开头则随机生成一个1到9之间的数字替换掉第一位。
您可以调用`generateUserId`方法,传入一个openid参数,即可生成一个符合要求的11位纯数字userid。
阅读全文