当前位置:首页 » 快递单号 » c生成订单号

c生成订单号

发布时间: 2021-03-15 10:10:02

『壹』 请问,在创建一个订单时,提交了订单信息和附件,还没有订单号产生,

C 语言程序,假定 订单号 int order=1234;生成新订单号含日期时间:
#include
#include

int main( )
{
time_t t;
int order,i;
char s[80];
order = 1234;
time(&t);
sprintf(s,"%s_%05d",ctime (&t),order);
for (i=0;iprintf("%s\n",s);
return 0;
}
输出例子: Fri_Feb_17_14:59:24_2017__01234

『贰』 怎么随机生成的Id变成16位的订单号

关于生成订单号的解决方案
电子商务及类电子商务的系统越来越多,我相信订单号问题是这类系统中最常见不过的一个问题了,但今天还是想谈谈。
这几天由于工作需要接手了另外一同事前期开发的一个交易系统,原本使用的是uniqid()函数生成的。uniqid()是根据系统时间经过一定算法得到的一个结果,关于uniqid()的详情手册上很清楚。
当时的生产方式是:
$order_sn = str_replace('.', '', uniqid('', true));
这种方式理论上说会重复,但是在实际应用中我相信这种重复可以认为是不可能事件。但是,如果这件事情到此就结束的话我也就不会再写这篇文章。这几天做支付接入,国内某大型网络支付机构只支持传递最多16位的订单号,无奈我只得调整订单号的生产规则。
其实关于生成订单号的方式非常多,大致有以下几个参数被用到:1、自增字段,2、系统时间,3、随机数,4、流水号。
一、数据库自增字段
二、简单的使用系统时间
三、系统时间加随机数
四、系统时间加流水号
先说说数据库自增字段,这种方式是最简单有效的方式,但同时也存在很大的弊端:
1、以mysql为例的int类型最多存储10位的数字,如果使用bigint则在使用php的mysql_insert_id()取上次插入id时会出现错误,当然这个错误是可以采用某些方法避免的。
2、很多时候业务逻辑需要在数据未插入系统之前就获得订单号以进行一系列的处理,这样就容易出错。比如当并发较高的时候系统获取到下一次插入的ID应该是10000,可是当真正insert的时候发现10000已经被其他插入行使用。
3、很容易透露出系统的销量,从商业层面说这种方式不太合适。
4、表现不够直观,不能通过订单号简表达订单信息
简单的使用系统时间也可以有多种方式比如直接使用time()生成10位数字,这种方式基本避免了数据库自增字段的大部分弊端,但同时也产生的一些新的问题,比如:并发量稍高(峰值每秒一次以上,相信这是个很小的值)就会产生相同订单号,而这是业务逻辑所不允许的。为了解决重复订单问题而使用随机数或者流水号。
先说随机数,这东西就跟看上去的字面意思一样,总显得不那么可靠,我认为尽量不使用它参与唯一标识。
再说流水号,既然叫流水号,它的性质其实和自增字段一样,不同的是或许每天或者每月流水号又会重新计数。总得有个地方来保存下一个(或者当前使用过的最大)流水号的值,如果存在文件中那就需要考虑这个文件的读写锁的问题,就这个问题估计足够写书了,在此不予讨论。如果以自增方式存在DB中,那么我们在程序生成订单号之前需要多访问(至少)一次DB,这也就降低了程序性能,要知道数据库访问对程序的性能影响是非常明显的
上面是一大堆废话,说说我的解决思路(PHP),当然同时别忘了大前提是:限制长度16位
第一步:
$order_sn = date('ymdHis').substr(microtime(),2,4);
其实这种方式基本已经满足需求了,无需访问DB无随机数参与。但是如果两次请求在相同的十万分之一秒内产生,那么相同订单就产生了,看能否有办法继续提高。
date(‘His’)所表达的结果其实就是000000到235959,而且其中很多数字不会被用到比如126998。一天86400秒,如果从一天的0:0:0算起直到23:59:59使用00000-86400就可以完全表示,这样下来我们就完全可以把date(‘His’)换成五位数字。既然time()函数就是按秒计数,那咱就取time()结果的后五位,同一天之内后五位不会重复出现,比如今天0:0:0后五位是98765,那么到今天23:59:59后五位就应该是98765+86400去掉最高位,相信这个应该是很好理解的。
这就产生了第二步的结果:
$order_sn = date('ymd').substr(time(),-5).substr(microtime(),2,5);
这样一来也导致无法直观的表达出订单生成的时分秒,但我认为(或者说从业务角度理解)这个属于可接受范围。同时这样处理出现重复订单的概率就降低到了第一步的1/10,我以为这应该不算一个小数字。还不满意?OK,那继续!
想要继续降低重复可能性那就继续提高时间精度,但是我们的长度限制只有16位,看来只有减少部分不长变动的字符。
date(‘ymd’)产生6位字符,而前两位在一年之内都不会变化,第三到第四位也就是01-12。
前两位我们可以使用A-Z的字母来表示,系统开始运行的那一年用A,第二年用B,第三年用C……类推,我相信我写的这程序运行不了10年。第三第四位完全可以使用一位16进制数表示,这样咱就又节约了两位字符,这就可以在末尾加上00-99的随机数。
现在看第三步的结果
$year_code = array('A','B','C','D','E','F','G','H','I','J');
$order_sn = $year_code[intval(date('Y'))-2010].
strtoupper(dechex(date('m'))).date('d').
substr(time(),-5).substr(microtime(),2,5).sprintf('d',rand(0,99));
理论上说出现重复订单号的概率又降到了第二步的1/100。
做个简单测试,写个php文件,连续10次echo出这三步结果得到的$order_sn,中间无任何多余程序。
第一种方案基本得到10个相同的结果。
第二种方案基本得到10个不同的结果,主要是后两位不同,一般末位差一。
第三种方案得到10个不同结果末四位不同
当然这个测试不具备多少说服力
优点:
1、不用操作数据库,性能较高。
2、较为直观,不难看出订单产生的大致时间
3、订单号重复的概率极小,只有程序在百万分之一秒内同时处理一个以上的生成订单号请求,而且同时生成的0-99的随机数也一样才会出现重复的订单号。

『叁』 怎么在一份C/O里面填写多份订单号

你好,你这问题最后怎么解决了?

『肆』 用c语言编一个订单信息管理程序

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
int N;//////订单数目
struct chanpin
{
long bianhao;
char mingcheng[30];
char cpmingcheng[30];
int cpdingjia;
int shuliang;
long jine;
};////订单编号、公司名称、产品名称、产品订价、订购数量、订单金额
void init(struct chanpin *p)
{

printf("输入订单编号:\t");
scanf("%d", &p->bianhao);
printf("\n输入公司名称:\t");
scanf("%s", p->mingcheng);
printf("\n输入产品名称:\t");
scanf("%s", p->cpmingcheng);
printf("\n输入产品定价:\t");
scanf("%d", &p->cpdingjia);
printf("\n输入订购数量:\t");
scanf("%d", &p->shuliang);
p->jine=p->cpdingjia * p->shuliang;
}//初始化

void displaymingcheng(struct chanpin *p)
{
printf("\n");
printf("公司名称:%s\n", p->mingcheng);
}

void display(struct chanpin *p)
{
displaymingcheng(p);
puts("-----------------------------------------------");//传说中的分割线
printf("订单编号:\t%ld", p->bianhao);
//printf("\n公司名称:\t%s", p->mingcheng);
printf("\n产品名称:\t%s", p->cpmingcheng);
printf("\n产品定价:\t%d", p->cpdingjia);
printf("\n订购数目:\t%d", p->shuliang);
printf("\n总金额是:\t%ld", p->jine);
puts("-----------------------------------------------");
}//输出一个产品的全部信息

void displaycompany(struct chanpin *p)
{
char temp[30];
int i;
printf("输入公司名称:\t");
gets(temp);
for(i=0;i<N;i++)
{
if(strcmp(temp, p[i].mingcheng)==0)
display(&p[i]);
}
puts("订单信息输出完毕!!!");
}///////////根据名称输出公司订单信息

void findbianhao(struct chanpin *p)
{
long temp;
int i;
printf("输入编号:\t");
scanf("%ld", &temp);
for(i=0;i<N;i++)
{
if(temp==p[i].bianhao)
display((p+i));
}
puts("根据编号查找完成!!!");

}//////根据编号查询 ....其他的查找方法我没写,你可以补上
void findcpmingcheng(struct chanpin *p)
{}///////产品名称查找
void findcpdingjia(struct chanpin *p)
{}////产品定价查找

int menu()
{
int x;
printf("根据公司名称输出订单输入 :\t c\n");
printf("根据编号查找输入:\t b\n");
printf("根据产品名称输入:\t m \n");
printf("根据定价查找输入:\t d \n");
printf("退出输入:\t e \n");
x=getchar();
getchar();
return x;
}

void main()
{
struct chanpin *cp;
int choic;
int i;
printf("请输入总书目:\t");
scanf("%d", &N);
cp=(struct chanpin *)malloc(N*sizeof(struct chanpin));
for(i=0;i<N;i++)
init(cp+i);//初始化所有产品
for(i=0;i<N;i++)
display(cp+i);///显示所有产品信息
choic=menu();
while(choic!='e')
{
if(choic=='c')
displaycompany(cp);/////调用公司查找
else if(choic=='b')
findbianhao(cp);///调用编号查找
else if(choic=='m')
findcpmingcheng(cp);////调用名称查找
else if(choic=='d')
findcpdingjia(cp);
else
printf("出入错误!\n");
choic=menu();
}
puts("感谢使用");
}

『伍』 如何生成一个这种形式的订单号

DateTime dttime=DateTime.Now;
string str=dttime.Year.ToString()+dttime.Month+dttime.Day;

string sql="select top 1 订单号 from 订单表 order by 订单号 desc";
执行该语句,返回现在数据库中最近一次生成的订单号.

然后对其进行操作:(比如最近一次生成订单号为 str2 )

int ii=Convert.ToInt32(str2.SubString(str2.Lenght-4))+1;
int len=ii.ToString().Length;
string str3="";
switch (len){
case 1:
str3="000"+ii.ToString();
break;
case 2:
str3="00"+ii.ToString();
break;
case 3:
str3="0"+ii.ToString();
break;
}

最后.你当前的订单号就是:
str+=str3;

---------------------

rebinglunlun - 高级魔法师 六级
愿听其详~~

『陆』 怎样将当前日期+订单号生成一个订单号

||C 语言程序,假定 订单号 int order=1234;生成新订单号含日期时间:
#include<stdio.h>
#include <time.h>

int main( )
{
time_t t;
int order,i;
char s[80];
order = 1234;
time(&t);
sprintf(s,"%s_%05d",ctime (&t),order);
for (i=0;i<strlen(s);i++) if (s[i]==' ' || s[i]=='\n') s[i]='_';
printf("%s\n",s);
return 0;
}
输出例子: Fri_Feb_17_14:59:24_2017__01234

『柒』 Oracle 自动生成标识列, 比如订单编号,学生ID

Oracle 自动生成标识列可以用序列。
a)创建序列:
create sequence 序列名
start with 起始位置
increment by 增量大小
maxValue 最大值(没有这些nomaxValue)
[cycle/nocycle(是否循环)];
例如:
create sequence seq_stu increment by 1 start with 001 nomaxvalue nocycle;
b)序列中的两个特殊属性:
.nextVal :下一个序列的值
.currVal :当前序列的值;
特别注意:只要用户使用了.nextVal 那么序列值就会增加一个增量,
eg:select seq_stu.nextVal from DUAL;序列值依然会增加一个增量!
c)两个特殊属性的使用:
加入学生信息表的StuId列是主键列,需要自己增长:
insert into StuInfo values ('Stu'||to_char(Sysdate,'yyyymmdd')||seq_stu.nextVal,....);
最后录入的学号就会是'Stu20111218001序列值' 。

『捌』 asp生成产品订单号问题

你的定单应该记录下在数据库,或者记录一个数据条目数字,使用数据库或者文本文件,注意锁定文件和数据库表,防止并发连接/写和读

你可以数据库查询下 定单号以070522开头的 数据中有多少记录,就是已经有几条了,之后就知道该用什么ABCD了字母了

『玖』 c320650245275订单号查询

不知道没说什么快递只有这个订单号

『拾』 java怎么自动生成订单号

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextArea;

public class CopyContentToAnother extends JFrame implements ActionListener{
JButton button;
JTextArea jtx,jtx2;
Container c;
JPanel p;

public CopyContentToAnother(){

c=this.getContentPane();

p= new JPanel();
jtx = new JTextArea(12,12);
jtx2 = new JTextArea(12,12);
button = new JButton("确定");
button.addActionListener(this);

p.add(jtx);
p.add(jtx2);
p.add(button);
this.add(p);
this.setSize(500, 400);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {

if(e.getSource() == button){
jtx2.setText(jtx.getText());
jtx.setText("");

}
}

public static void main(String args[]){

CopyContentToAnother m =new CopyContentToAnother();
}
}

上面已经回答了
编译已经通过,运行正确,如果还有问题,请留言ITjob

热点内容
在菲律宾用什么软件看国内电影 发布:2024-08-18 19:45:19 浏览:95
不是现代主义电影的是 发布:2024-08-18 16:26:58 浏览:792
在船上吃人的电影是哪一部 发布:2024-08-18 15:33:07 浏览:268
丁咚的电影 发布:2024-08-18 14:47:05 浏览:429
86.mm。kk 发布:2024-08-18 13:59:40 浏览:39
箱子男电影在线免费看 发布:2024-08-18 06:38:34 浏览:592
玩命快递4迅雷下载 发布:2024-08-18 04:41:05 浏览:839
电影票取票码是序列号还是二维码 发布:2024-08-17 21:52:01 浏览:467
韩国我也隐藏了真相演员表 发布:2024-08-17 21:22:10 浏览:178
安达市隆美影院5月26日播放 发布:2024-08-17 20:37:58 浏览:976