CodeUtils.java 2.35 KB
Newer Older
licc's avatar
licc committed
1 2 3 4 5
package cn.wisenergy.service.util;

import cn.wisenergy.common.utils.DateUtil;
import org.apache.commons.lang.RandomStringUtils;

licc's avatar
licc committed
6 7
import java.text.ParseException;
import java.text.SimpleDateFormat;
licc's avatar
licc committed
8 9 10 11 12 13 14 15 16 17 18
import java.util.Date;

/**
 * 生成防伪二维码产品编号工具类
 *
 * @author 86187
 */
public class CodeUtils {

    private static final String VALUE = "nishidamori";

licc's avatar
licc committed
19
    public static String createProductNo(String batchNumber, String batchNo, String produceTime) throws ParseException {
licc's avatar
licc committed
20 21
        //产品编号 =固定值+生产时间+生产批次+编号+随机数+校验规则
        String random = getRandom();
licc's avatar
licc committed
22 23 24 25 26
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
        Date date = format.parse(produceTime);
        String time = format.format(date);
        String ruleNumber = getVerifyNumber(batchNumber, batchNo, time, random);
        return VALUE + time + batchNumber + batchNo + random + ruleNumber;
licc's avatar
licc committed
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
    }

    /**
     * 获取字符串中的数字
     *
     * @param str 字符串
     * @return 数字
     */
    private static String getNumber(String str) {
        StringBuilder number = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            if (Character.isDigit(str.charAt(i))) {
                number.append(i);
            }
        }
        return number.toString();
    }

    /**
     * 获取校验规则位
     *
     * @param batchNumber 批次号
     * @param batchNo     编号
     * @param produceTime 生成时间
     * @param random      随机数
     * @return 校验规则位
     */
    private static String getVerifyNumber(String batchNumber, String batchNo, String produceTime, String random) {
        //获取随机字符串中的数字
        String number = getNumber(random);
        String str = batchNumber + batchNo + produceTime + number;
        char[] ar = str.toCharArray();
        int value = 0;
        for (char c : ar) {
            value = value + Integer.parseInt(String.valueOf(c));
        }
        int ss = value % 9;
        return String.valueOf(ss);
    }

    /**
     * 获取八位随机字符串
     *
     * @return 八位随机字符串
     */
    private static String getRandom() {
        return RandomStringUtils.random(8, "abcdefghijklmnopqrstuvwxyz1234567890");
    }


    public static void main(String[] args) {
        System.out.println(45 % 9);
    }

}