目录

  • 1、统一社会信用代码校验工具类
  • 2、验证手机号工具类
  • 3、图片url链接转为multipartfile
  • 4、时间戳和时间相互转换

1、统一社会信用代码校验工具类

/**
 * 组织机构代码/统一社会信用代码校验工具类
 *
 * 1.isUniformSocialCreditCode方法用于判断统一社会信用代码是否有效
 * 2.isOrganizationCertificate方法用于判断组织机构代码是否有效
 */
public class RegexUtil {
    private static final String BASE_CODE_STRING = "0123456789ABCDEFGHJKLMNPQRTUWXY";
    private static final char[] BASE_CODE_ARRAY = BASE_CODE_STRING.toCharArray();
    private static final List<Character> BASE_CODES = new ArrayList<Character>();
    private static final String BASE_CODE_REGEX = "[" + BASE_CODE_STRING + "]{18}";
    private static final int[] WEIGHT = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28};

    static {
        for (char c : BASE_CODE_ARRAY) {
            BASE_CODES.add(c);
        }
    }

    /**
     * 加权因子
     */
    private static int power[] = {3,7,9,10,5,8,4,2};
    /**
     * 判断统一社会信用代码是否有效
     * @return
     */
    public static boolean isUniformSocialCreditCode(String socialCreditCode) {
        if (StringUtils.isBlank(socialCreditCode) || !Pattern.matches(BASE_CODE_REGEX, socialCreditCode)) {
            return false;
        }
        char[] businessCodeArray = socialCreditCode.toCharArray();
        char check = businessCodeArray[17];
        int sum = 0;
        for (int i = 0; i < 17; i++) {
            char key = businessCodeArray[i];
            sum += (BASE_CODES.indexOf(key) * WEIGHT[i]);
        }
        int value = 31 - sum % 31;
        return check == BASE_CODE_ARRAY[value % 31];
    }
    /**
     * 判断组织机构代码是否有效
     * (三证合一,五证合一之后,组织机构代码证已经取消。取而代之的是统一社会信用代码)
     * 此方法用于备用
     * @param organizationCertificate
     * @return
     */
    public static boolean isOrganizationCertificate(String organizationCertificate) {
        String temp = organizationCertificate.toUpperCase();
        if (temp.contains("-")) {
            temp = temp.replace("-", "");
        }
        if(temp.length()!=9){
            return false;
        }
        // 获取前面8位
        String pre8 = temp.substring(0,8);
        char[] pre8chars = pre8.toCharArray();// 0~z;
        // 获取校验码
        String code = temp.substring(8,9);
        boolean isCode = isCode(code,sum(pre8chars));
        return isCode;
    }

    /**
     * 求和
     * @param bit
     * @return
     */
    private static int sum(char[] bit){
        int sum = 0;
        for(int i=0;i<bit.length;i++){
            int intTemp = bit[i]>'9'?(bit[i]-'A'+10):Integer.parseInt(bit[i]+"");
            System.out.print(" "+intTemp);
            sum +=intTemp*power[i];
        }
        return  sum;
    }

    /**
     * 判断机构代码的校验码和计算出的校验码是否一致
     * @param a
     * @param b
     * @return
     */
    private static boolean isCode(String a,int b){
        String codeTEmp = (11- b%11)==10?"X":(11- b%11)==11?0+"":(11- b%11)+"";
        return a.equals(codeTEmp);
    }

}

2、验证手机号工具类

/**
 * 验证手机号工具类(大陆号码、香港号码均可)
 */
public class PhoneFormatCheckUtils {

    /**
     * 大陆号码或香港号码均可
     */
    public static boolean isPhoneLegal(String str) throws PatternSyntaxException {
        return isChinaPhoneLegal(str) || isHKPhoneLegal(str);
    }

    /**
     * 大陆手机号码11位数,匹配格式:前三位固定格式+后8位任意数
     * 此方法中前三位格式有:
     * 13+任意数
     * 145,147,149
     * 15+除4的任意数(不要写^4,这样的话字母也会被认为是正确的)
     * 166
     * 17+3,5,6,7,8
     * 18+任意数
     * 198,199
     */
    public static boolean isChinaPhoneLegal(String str) throws PatternSyntaxException {
        // ^ 匹配输入字符串开始的位置
        // \d 匹配一个或多个数字,其中 \ 要转义,所以是 \\d
        // $ 匹配输入字符串结尾的位置
        String regExp = "^((13[0-9])|(14[5,7,9])|(15[0-3,5-9])|(166)|(17[3,5,6,7,8])" +
                "|(18[0-9])|(19[8,9]))\\d{8}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }

    /**
     * 香港手机号码8位数,5|6|8|9开头+7位任意数
     */
    public static boolean isHKPhoneLegal(String str) throws PatternSyntaxException {
        // ^ 匹配输入字符串开始的位置
        // \d 匹配一个或多个数字,其中 \ 要转义,所以是 \\d
        // $ 匹配输入字符串结尾的位置
        String regExp = "^(5|6|8|9)\\d{7}$";
        Pattern p = Pattern.compile(regExp);
        Matcher m = p.matcher(str);
        return m.matches();
    }
}

3、图片url链接转为multipartfile

javascript:void(0)

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * @Author: jingwenjuan
 * @Description: url转成MultipartFile
 */
@Slf4j
public class UrlToMultipartFile {

    /**
     * inputStream 转 File
     */
    public static File inputStreamToFile(InputStream ins, String name) throws Exception{
        //System.getProperty("java.io.tmpdir")临时目录+File.separator目录中间的间隔符+文件名
        File file = new File(System.getProperty("java.io.tmpdir") + File.separator + name);
//        if (file.exists()) {
//            return file;
//        }
        OutputStream os = new FileOutputStream(file);
        int bytesRead;
        int len = 8192;
        byte[] buffer = new byte[len];
        while ((bytesRead = ins.read(buffer, 0, len)) != -1) {
            os.write(buffer, 0, bytesRead);
        }
        os.close();
        ins.close();
        return file;
    }

    /**
     * file转multipartFile
     */
    public static MultipartFile fileToMultipartFile(File file) {
        FileItemFactory factory = new DiskFileItemFactory(16, null);
        FileItem item=factory.createItem(file.getName(),"text/plain",true,file.getName());
        int bytesRead = 0;
        byte[] buffer = new byte[8192];
        try {
            FileInputStream fis = new FileInputStream(file);
            OutputStream os = item.getOutputStream();
            while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new CommonsMultipartFile(item);
    }

    /**
     * url转MultipartFile
     */
    public static MultipartFile urlToMultipartFile(String url) throws Exception {
        File file = null;
        MultipartFile multipartFile = null;
        try {
            HttpURLConnection httpUrl = (HttpURLConnection) new URL(url).openConnection();
            httpUrl.connect();
            file = UrlToMultipartFile.inputStreamToFile(httpUrl.getInputStream(),"template.png");
            log.info("---------"+file+"-------------");

            multipartFile = UrlToMultipartFile.fileToMultipartFile(file);
            httpUrl.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return multipartFile;
    }
}

// jar包
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.2.2</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>

// 测试
@ApiOperation("批量上传图片")
    @PostMapping("/uploadImgs")
    public ApiResultDto<List<UploadBack>> uploadImgs(@Valid @RequestBody UploadParam param) throws Exception {
        List<String> urls = param.getUrls();
        List<UploadBack> backs = new ArrayList<>();
        if (!CollectionUtils.isEmpty(urls)) {
            System.out.println("----------"+urls.size());
            urls.forEach(url-> System.out.println("图片链接-------"+url+"---------"));
            for (String url : urls) {
                MultipartFile file = UrlToMultipartFile.urlToMultipartFile(url);
                ApiResultDto<UploadBack> res = uploadToALi(file, param);
                if(res.getCode().equals(200)) {
                    backs.add(res.getData());
                }else{
                    return new ApiResultDto<>(400,"上传失败!");
                }
            }
            backs.forEach(back-> System.out.println("----本地图片地址---"+back+"--------"));
        }else{
            log.info("---------没有图片链接--------"+urls);
        }

        return new ApiResultDto<>(backs);
    }

    @ApiOperation("上传文件")
    @PostMapping("/uploadFile")
    public ApiResultDto<UploadBack> uploadToALi(MultipartFile file,@Valid  UploadParam param) throws IOException {
        InputStream inputStream = file.getInputStream();
        param.setUploadTime(new Date());
        param.setFileName(file.getOriginalFilename());
        String dataUrl = fileUploadService.uploadToOSS(inputStream, param).getData();
        System.out.println("-----------URL----------"+dataUrl);

        return articleService.addAttachment(param.getArticleId(),dataUrl,param.getUploadType(),file.getOriginalFilename());
    }

4、时间戳和时间相互转换

/* 
 * 将时间戳转换为时间
 */
public static String stampToDate(String s){
    String res;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    long lt = new Long(s);
    Date date = new Date(lt);
    res = simpleDateFormat.format(date);
    return res;
}

/* 
 * 将时间转换为时间戳
 */    
public static String dateToStamp(String s) throws ParseException{
    String res;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = simpleDateFormat.parse(s);
    long ts = date.getTime();
    res = String.valueOf(ts);
    return res;
}