| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package cn.iocoder.yudao.framework.common.util.number; |
| | | |
| | | import java.util.concurrent.ThreadLocalRandom; |
| | | |
| | | /** |
| | | * ä¸å¡ç¼ç ï¼åæ®å· / ä¸»æ°æ®ç¼ç ï¼çæçå
Œ
±çº¦å®ã |
| | | * |
| | | * <p>éæ±ï¼ç³»ç»ä¸ææèªå¨çæçä¸å¡ç¼ç ç»ä¸ä¸ºã16 ä½çº¯æ°åãï¼ä¸**éæºçæãä¸ä½¿ç¨èªå¢/顺åº**ï¼ |
| | | * åæ¶ä¿è¯å
¨ç³»ç»å¯ä¸ï¼ä»»æä¸¤æ¡ç¼ç é½ä¸éå¤ï¼ã |
| | | * |
| | | * <p>å®ç°çº¦å®ï¼ |
| | | * <ul> |
| | | * <li>ç¼ç = éæº 16 使°åï¼èå´ 0 ~ 10^16-1ï¼å·¦ä¾§è¡¥ '0'ï¼ï¼</li> |
| | | * <li>å¯ä¸æ§ç± Redis éå {@link #USED_SET_KEY} æ¥éä¿è¯ï¼éæºçæååå
¥éåï¼ |
| | | * åæåï¼è¿å 1ï¼è¯´ææ²¡ç¨è¿æéç¨ï¼å¦åéè¯ï¼</li> |
| | | * <li>åçæç¹ï¼è§ {@link #randomCode()} ä¸ {@link #MAX_RETRY}ã</li> |
| | | * </ul> |
| | | * |
| | | * <p>注æï¼Redis éå丢失åï¼åå²ç¼ç å¯è½è¢«éæ°éæºå½ä¸ï¼åºç¨å¯å¨æ¶ä¼å°åºå
å·²æç¼ç |
| | | * éæ°è½½å
¥éåï¼è§ yudao-server çå¯å¨å
åºï¼ã |
| | | */ |
| | | public class BizNoUtils { |
| | | |
| | | /** |
| | | * 已使ç¨ä¸å¡ç¼ç ç Redis éå KEYï¼ç¨äºéæºç¼ç æ¥éï¼ä¿è¯å
¨ç³»ç»å¯ä¸ã |
| | | */ |
| | | public static final String USED_SET_KEY = "biz:code:used"; |
| | | |
| | | /** |
| | | * ä¸å¡ç¼ç çæ»é¿åº¦ï¼16 ä½ |
| | | */ |
| | | public static final int CODE_LENGTH = 16; |
| | | |
| | | /** |
| | | * éæºç¼ç ç空é´ä¸éï¼ä¸å«ï¼ï¼10^16 |
| | | */ |
| | | private static final long CODE_SPACE = 10_000_000_000_000_000L; |
| | | |
| | | /** |
| | | * çæéæºç¼ç æ¶çæå¤§éè¯æ¬¡æ°ï¼å½ä¸å·²ç¨ç¼ç æ¶éè¯ï¼ |
| | | */ |
| | | public static final int MAX_RETRY = 10; |
| | | |
| | | /** |
| | | * çæä¸ä¸ªéæº 16 ä½çº¯æ°åç¼ç ï¼å·¦ä¾§è¡¥ '0'ï¼ï¼**ä¸åæ¥é**ã |
| | | * |
| | | * <p>è°ç¨æ¹éèªè¡ç¨ {@link #USED_SET_KEY} æ¥éï¼å½ä¸åéè¯ã |
| | | * |
| | | * @return éæº 16 ä½çº¯æ°åç¼ç |
| | | */ |
| | | public static String randomCode() { |
| | | return String.format("%0" + CODE_LENGTH + "d", ThreadLocalRandom.current().nextLong(CODE_SPACE)); |
| | | } |
| | | |
| | | } |