/**************************获得序列号格式:XXX0000XXXXX 如:LHY0000123456*************************/
/***************************注:此处ID范围为0~4294967295********************************************/
void __fastcall GetSerialnumber(char *dest,char *code,int codelen,unsigned int ID)
{
   char *pDest=new char[codelen+10];
   memset(pDest,0,codelen+10);
   memcpy(pDest,code,codelen);
   for(int i=codelen;i<codelen+10;++i)
   {
     pDest[i]+='0';
   }
   char sz[11]="";
   itoa(ID,sz,10);
   int len=lstrlenA(sz);
   memcpy(pDest+(codelen+10-len),sz,len);
   memcpy(dest,pDest,lstrlenA(pDest)+1);
   delete [] pDest;
}
//调用示例:
char serialnum[100]="";
char  *code="LHY";
unsigned int  ID=123;//可以是自动递增数
GetSerialnumber(serialnum,code,lstrlenA(sz),ID);


多个客户端同时操作数据库(如:新增用户编号)时需要保证生成编号不重复,下面是一个可支持并发操作的SQL Server存储过程

CREATE PROCEDURE GenerateID
@Code varchar(20),
@ID varchar(50) output
AS
/*启用事务控制并发编号不重复*/
BEGIN TRANSACTION
  declare @maxid int
  set @maxid=0
  select *from 会员信息表
  if @@rowcount>0
  begin
	declare @max varchar(50)
	select @max=max(会员编号) from 会员信息表
	select @maxid=right(@max,9) 
  end
    set @maxid=@maxid+1
    declare @j int
    set @j=9-len(@maxid)
    declare @i int
    set @i=0
    set @ID=@Code
    while @i<@j
    begin
    set @ID=@ID+'0';
    set @i=@i+1; 
    end
    
    set @ID=@ID+convert(varchar(20),@maxid)
    insert into 会员信息表(会员编号) values(@ID)
COMMIT
GO