#DROP FUNCTION IF EXISTS func_getVoucherId ;
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的任丘網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
CREATE FUNCTION func_getVoucherId /*生成憑證編號(hào)*/
(
f_str varchar(255)
)
returns varchar(255) charset utf8
begin
/*獲取最大憑證號(hào)*/
declare v_maxVoucherId varchar(255) default '';
/*獲取最大憑證號(hào)*/
declare v_flowMaxVoucherId varchar(255) default '';
/*新的憑證號(hào)*/
declare v_newVoucherId varchar(255) default '';
/*判斷是新增存盤還是入賬存盤*/
if ifnull(rtrim(f_str),'') = '' then
select max(voucher_code) into v_maxVoucherId from finance_voucher ;
if ifnull(rtrim(v_maxVoucherId),'')='' then
set v_newVoucherId = rpad(replace(cast(curdate() as char(255)),'-',''),11,0); /*生成憑證編號(hào)*/
else
set v_newVoucherId = convert((convert(v_maxVoucherId,signed)+1),char(255));
end if ;
elseif ifnull(rtrim(f_str),'') = 'r' then
select max(voucherInfo) into v_flowMaxVoucherId from province_voucher_account_flow ;
if ifnull(rtrim(v_flowMaxVoucherId),'')='' then
set v_newVoucherId = rpad(replace(cast(curdate() as char(255)),'-',''),12,0); /*生成憑證編號(hào)*/
else
set v_newVoucherId = convert((convert(v_flowMaxVoucherId,signed)+1),char(255));
end if ;
end if ;
return v_newVoucherId ;
end ;
我目前做的項(xiàng)目也涉及到了這個(gè)生成規(guī)則,我用MYSQL數(shù)據(jù)庫(kù)函數(shù)寫(xiě)了一個(gè),你看下吧,希望能幫到你
那就傳分類的參數(shù),去生成唄,,,,,從數(shù)據(jù)中確定下一個(gè)編號(hào)
~
~
~
提供2個(gè)思路:
1:存取最后一次序列號(hào)的日期,每次生成序號(hào)的時(shí)候取該日期和當(dāng)前日期對(duì)比不同則重新計(jì)數(shù),并將本次日期覆蓋為最后一次序列號(hào)的日期;
2:如果用數(shù)據(jù)庫(kù)存儲(chǔ)的話可以考慮每次去數(shù)據(jù)庫(kù)查詢是否有l(wèi)ike當(dāng)前日期的序號(hào),沒(méi)有則重新計(jì)數(shù);
public class Main {
private static long n = 1;
public static void main(String[] args) {
System.out.println(test(n));
System.out.println(test(n));
}
public static long test(long l) {
String str = new SimpleDateFormat("yyyyMM")
.format(new java.util.Date());
long m = Long.parseLong((str)) * 10000;
long ret = m + l;
n = l + 1;
return ret;
}
}
可以直接通過(guò)jdk基本方法,獲取到當(dāng)前的時(shí)間
Date date= new Date();//創(chuàng)建一個(gè)時(shí)間對(duì)象,獲取到當(dāng)前的時(shí)間
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//設(shè)置時(shí)間顯示格式
String str = sdf.format(date);//將當(dāng)前時(shí)間格式化為需要的類型
System.out.println(str);//輸出結(jié)果
結(jié)果為:2015-11-06 13:53:54(實(shí)時(shí))。
public class test1 {
public synchronized static String getNum(){
StringBuffer sb=new StringBuffer();
Calendar cal = new GregorianCalendar();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1;
sb.append(year);
if(month10){
sb.append("0"+month);
}else{
sb.append(month);
}
sb.append(getLastSixNum());
return sb.toString();
}
public static String getLastSixNum(){
int count = 0;
char str[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
StringBuffer pwd = new StringBuffer("");
Random r = new Random();
while (count 6) {
int i = Math.abs(r.nextInt(10));
if (i = 0 i str.length) {
pwd.append(str[i]);
count++;
}
}
return pwd.toString();
}
public static void main(String []args){
System.out.println(test1.getLastSixNum());
System.out.println(test1.getNum());
}
}
在getLastSixNum()方法體中還可以自己設(shè)置規(guī)則。。
我是采用隨即產(chǎn)生的了。。
如果要是產(chǎn)生不重復(fù)的號(hào)碼 最好再getNum()方法上加鎖
我有修改了我的方案: 采用日期和后續(xù)六位鍵值對(duì)的形式
這樣做的好處是 日期改變時(shí)候,后續(xù)六位從1開(kāi)始記位
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;
public class test1 {
private static MapString,String map=new HashMapString, String();
private static String STATNUM="000001";
public String getYearAndMonth(){
StringBuffer sb=new StringBuffer();
Calendar cal = new GregorianCalendar();
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1;
sb.append(year);
if(month10){
sb.append("0"+month);
}else{
sb.append(month);
}
return sb.toString();
}
public String getLastSixNum(String s){
String rs=s;
int i=Integer.parseInt(rs);
i+=1;
rs=""+i;
for (int j = rs.length(); j 6; j++) {
rs="0"+rs;
}
return rs;
}
public synchronized String getNum(){
String yearAMon=getYearAndMonth();
String last6Num=map.get(yearAMon);
if(last6Num==null){
map.put(yearAMon,STATNUM);
}else{
map.put(yearAMon,getLastSixNum(last6Num));
}
return yearAMon+map.get(yearAMon);
}
public static void main(String []args){
test1 t= new test1();
System.out.println(t.getNum());
System.out.println(t.getNum());
System.out.println(t.getNum());
}
}
測(cè)試結(jié)果:
201109000001
201109000002
201109000003
網(wǎng)站標(biāo)題:java時(shí)間做編號(hào)的代碼,java時(shí)間做編號(hào)的代碼有哪些
當(dāng)前URL:http://chinadenli.net/article14/hohgge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、ChatGPT、外貿(mào)建站、用戶體驗(yàn)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)