有一个字符串“assf0001”,这是一个员工编号。要求:
下一个员工,让这个编号“assf0001”自加一,变为“assf0002”。满十进一,也就是“assf0009”下一个编号是“assf0010”,最大的编号是“assf9999”。在下的思路是:
取出“0001”中的每一位,然后判断第一位是“9”则第二位加一。如果第二位也是“9”,则第三位加一。以此类推。大家还有其它比较好的方法吗?最好能给点代码,不甚感激。
下一个员工,让这个编号“assf0001”自加一,变为“assf0002”。满十进一,也就是“assf0009”下一个编号是“assf0010”,最大的编号是“assf9999”。在下的思路是:
取出“0001”中的每一位,然后判断第一位是“9”则第二位加一。如果第二位也是“9”,则第三位加一。以此类推。大家还有其它比较好的方法吗?最好能给点代码,不甚感激。
{
Console.WriteLine(GetNext("assf0001"));
}public static string GetNext(string s)
{
return Regex.Replace(s, @"\d+$", delegate(Match m) { return (int.Parse(m.Value) + 1).ToString().PadLeft(m.Length,'0'); });
}
string s = "assf0001";
string ss =s.Substring(0,4)+ (Convert.ToInt32(s.Substring(4, 4)) + 1).ToString("0000");
{
int n = int.Parse(id.Substring(4, 4));
return string.Format("assf{0:0000}", n + 1);
}
i++;
string sNum=i.ToString("0000");
string id="assf"+sNum;
可以自动增加。
void Main()
{
string s = "assf0101";
string s1 = s.Substring(0, 4);
s = s1 + (Convert.ToInt32(s.Replace(s1,"")) + 1).ToString("d4");
Console.Write(s);
}
//assf0102
按数据就是了。每次生成下个员工编号的时,就是Int类型,加就是了。9+1=10...以此类推。位数不够组成字符串的时候补零即可
string prefix = "assf";
string preCode = "assf0001";
string nextCode = string.Format("{0}{1:d4}",prefix,
int.Parse(preCode.Replace(prefix,string.Empty))+1);
string a="assf"; for( int i =0;i<4;i++)
{
Console.WriteLine(a + i.ToString().PadLeft(4,'0'));
}
至于你说的那个前面加些字母的,我想这个应该不是什么难事情把,不用我说了。set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER FUNCTION [dbo].[GetNnum](@cardnum int)
RETURNS varchar(4)
AS
BEGIN
DECLARE @CardID varchar(4),@cardstr varchar(4) WHILE @cardnum>0
BEGIN
set @CardID=right('0000'+CAST (@cardnum AS VARCHAR(4) ),4)
set @cardstr=''
select @cardstr=CardID from tb_card_input where CardID=''+@CardID+''
if @cardstr is null or @cardstr=''
begin
return @CardID
set @cardnum=0
end
else
set @cardnum=@cardnum+1
END
return(0)
END
找到你的那个字段的表。
public static String getSeqID(){
java.text.DecimalFormat format = new java.text.DecimalFormat("0000");
return "assf"+format.format((++num)%10000);
}
public class Staff{ private static int num=0;
public static synchronized String getID(String preStr,int len){
if(len<1){
return preStr;
}
StringBuffer sb=new StringBuffer();
for(int i=0;i<len;i++){
sb.append("0");
}
java.text.DecimalFormat format = new java.text.DecimalFormat(sb.toString());
return preStr+format.format((++num)%10^len);
}
public static void main(String[] args) {
System.out.println(getSeqNum("asdf",4));
}}
再次纠正一次。
package cn.emay.util;public class Staff { private static int num = 0; public static synchronized String getID(String preStr, int len) {
if (len < 1) {
return preStr;
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < len; i++) {
sb.append("0");
}
java.text.DecimalFormat format = new java.text.DecimalFormat(sb
.toString());
return preStr + format.format((++num) % (10 ^ len));
} public static void main(String[] args) {
System.out.println(getID("asdf", 4));
}}
if (len < 1) {
return preStr;
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < len; i++) {
sb.append("0");
}
java.text.DecimalFormat format = new java.text.DecimalFormat(sb
.toString());
return preStr + format.format((++num) % (10 ^ len));
} public static void main(String[] args) {
System.out.println(getID("asdf", 4));
}}
刚好有资源,相类似的,是用sql的存储过程实现的,前面一段是用时间来表示的,你可以改改,呵呵。
--产生退货表编号
alter proc proc_ExitNumber
(
@StrId varchar(20) output
)
as
declare @Id varchar(20),
@Str varchar(10),
@Ing Int
select @Id=max(eid) from exitshop where
Convert(int,Substring(eid,1,8))- Convert(int,Convert(varchar(20),getdate(),112))=0
--判断是否产生订单,如果产生则@Id不为空
if @Id is null
set @StrId=Convert(varchar(20),getdate(),112)+'001';
else
begin
set @Str=Substring(@Id,1,8)
set @Ing=1+Convert(Int,Substring(@Id,9,dataLength(@Id)))
--print dataLength(@Id)
if(len(@Ing)=1)
set @StrId=@Str+'00'+Convert(varchar(10),(@Ing))
print len(@Ing)
if(len(@Ing)=2)
set @StrId=@Str+'0'+Convert(varchar(10),(@Ing))
if(len(@Ing)=3)
set @StrId=@Str+Convert(varchar(10),(@Ing))
end
eid是你要的插入数据的id
exitshop 是那张表,应该是知道的吧,呵呵。
public string GetNextStr(String str)
{
string strContant = str.Substring(0,4);
int intNo = int.Parse(str.Substring(4,4)) + 1;
return strContant + intNo.ToString().PadLeft(4,'0');
//如果str = assf0001,那么return 为assf0002 }
你要的是后4位
你用字符串截取到后四位
将后四位强转为int类型
不满足这个变量为9999让这个int型变量加一
再将这个变量跟 assf +=不就得了
这么简单
(
No nvarchar(10),
Flag int
)
assf0001--assf9999添加到数据库里,然后从数据库里取。
public string Num{
get {
return "assf"+this.num;
}
set {
this.num= value;
}
}
{
static void Main(string[] args)
{
string beginNo = "abc001"; Console.WriteLine(GetNextNoValue(beginNo)); //输出为 abc002 beginNo = "ABCDEFG00002"; Console.WriteLine(GetNextNoValue(beginNo)); //输出为 ABCDEFG00003 beginNo = "SSFE090ACEF0989"; Console.WriteLine(GetNextNoValue(beginNo)); //输出为 SSFE090ACEF0990 Console.Read();
} static string GetNextNoValue(string value)
{
if (value == null || value.Trim() == "")
{
return null;
}
int cLen = 0;
for (int i = value.Length - 1; i >= 0; i--)
{
if (char.IsDigit(value[i]) == true)
{
cLen++;
}
else
{
break;
}
}
if (cLen > 0)
{
int NewNo = Convert.ToInt32(value.Substring(value.Length - cLen, cLen)) + 1;
string NewValue = NewNo.ToString().PadLeft(cLen, '0');
return value.Substring(0, value.Length - cLen) + NewValue;
}
else
{
return null;
}
}
}
{
if (value == null || value.Trim() == "")
{
return null;
}
value = value.Trim();
int cLen = 0;
for (int i = value.Length - 1; i >= 0; i--)
{
if (char.IsDigit(value[i]) == true)
{
cLen++;
}
else
{
break;
}
}
if (cLen > 0)
{
int NewNo = Convert.ToInt32(value.Substring(value.Length - cLen, cLen)) + 1;
string NewValue = NewNo.ToString().PadLeft(cLen, '0');
return value.Substring(0, value.Length - cLen) + NewValue;
}
else
{
return null;
}
}