生成规则设计

本文涉及的产品
语种识别,语种识别 100万字符
文档翻译,文档翻译 1千页
图片翻译,图片翻译 100张
简介:

每一个电子商务网站,现在有一种或多种类型的优惠/折扣/优惠券系统,给大家分享一下如何在PHP生成唯一的促销/折扣码

Java代码   收藏代码
  1. <?php  
  2. /**  
  3.  * @param int $no_of_codes//定义一个int类型的参数 用来确定生成多少个优惠码 
  4.  * @param array $exclude_codes_array//定义一个exclude_codes_array类型的数组 
  5.  * @param int $code_length //定义一个code_length的参数来确定优惠码的长度 
  6.  * @return array//返回数组 
  7.  */  
  8. function generate_promotion_code($no_of_codes, $exclude_codes_array = '', $code_length = 4) {  
  9.     $characters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
  10.     $promotion_codes = array(); //这个数组用来接收生成的优惠码  
  11.     for ($j = 0; $j < $no_of_codes; $j++) {  
  12.         $code = "";  
  13.         for ($i = 0; $i < $code_length; $i++) {  
  14.             $code.= $characters[mt_rand(0, strlen($characters) - 1) ];  
  15.         }  
  16.         //如果生成的4位随机数不再我们定义的$promotion_codes函数里面  
  17.         if (!in_array($code, $promotion_codes)) {  
  18.             if (is_array($exclude_codes_array)) //  
  19.             {  
  20.                 if (!in_array($code, $exclude_codes_array)) //排除已经使用的优惠码  
  21.                 {  
  22.                     $promotion_codes[$j] = $code;  
  23.                     #将生成的新优惠码赋值给promotion_codes数组  
  24.                 } else {  
  25.                     $j--;  
  26.                 }  
  27.             } else {  
  28.                 $promotion_codes[$j] = $code; //将优惠码赋值给数组                 
  29.             }  
  30.         } else {  
  31.             $j--;  
  32.         }  
  33.     }  
  34.     return $promotion_codes;  
  35. }  
  36. echo '<h1>Promotion / Discount Codes</h1>';  
  37. echo '<pre>';  
  38. print_r(generate_promotion_code(50''4));  
  39. echo '</pre>';  
  40. ?>   

discuz 卡密生成规则设计:DZ2011QSYLP54985V6Q9T

Java代码   收藏代码
  1. var $rulekey = array("str" => "\@""num" => "\#""full" => "\*");  
  2. var $rulemap_str = "ABCDEFGHIJKLMNPQRSTUVWXYZ";  
  3. var $rulemap_num = "123456789";  
  4.   
  5. function make($rule = '', $num = 1)  
  6. {  
  7.     $makeRule = empty($rule) ? "@@@@####*" : trim($rule);  
  8.     if (empty($makeRule)) {  
  9.         return -1//制卡规则为空  
  10.     }  
  11.     for ($i = 0; $i < $num; $i++) {  
  12.         $attempt = 0;  
  13.         do {  
  14.             if ($attempt >= self::CODE_GENERATION_ATTEMPTS) {  
  15.                 die('生成卡时跳过重复卡号上限次数用完.');  
  16.             }  
  17.             $card = $this->createCardNo($makeRule);  
  18.             $attempt++;  
  19.         } while ($this->exists($card));  
  20.         //saveCard($card);  
  21.     }  
  22.     return true;  
  23. }  
  24.   
  25. function createCardNo($makeRule)  
  26. {  
  27.     if ($ruleReturn = $this->checkrule($makeRule)) {  
  28.         $card = $makeRule;  
  29.         if (is_array($ruleReturn)) {  
  30.             foreach ($ruleReturn AS $key => $val) {  
  31.                 $search = array();  
  32.                 foreach ($val AS $skey => $sval) {  
  33.                     $search[] = '/' . $this->rulekey[$key] . '/';  
  34.                 }  
  35.                 $card = preg_replace($search, $val, $card, 1);  
  36.             }  
  37.         }  
  38.         return $card;  
  39.     } else {  
  40.         return 0;  
  41.     }  
  42. }  
  43.   
  44. function checkrule($rule)  
  45. {  
  46.     if (!preg_match("/^[A-Z0-9\@|\#|\*]+$/i", $rule)) {  
  47.         return -2;  
  48.     }  
  49.   
  50.     $ruleReturn = array();  
  51.     foreach ($this->rulekey AS $key => $val) {  
  52.         $match = array();  
  53.         preg_match_all("/($val){1}/i", $rule, $match);  
  54.         $number[$key] = count($match[0]);  
  55.         if ($number[$key] > 0) {  
  56.             for ($i = 0; $i < $number[$key]; $i++) {  
  57.                 switch ($key) {  
  58.                     case 'str':  
  59.                         $rand = mt_rand(0, (strlen($this->rulemap_str) - 1));  
  60.                         $ruleReturn[$key][$i] = $this->rulemap_str[$rand];  
  61.                         break;  
  62.                     case 'num':  
  63.                         $rand = mt_rand(0, (strlen($this->rulemap_num) - 1));  
  64.                         $ruleReturn[$key][$i] = $this->rulemap_num[$rand];  
  65.                         break;  
  66.                     case 'full':  
  67.                         $fullstr = $this->rulemap_str . $this->rulemap_num;  
  68.                         $rand = mt_rand(0, (strlen($fullstr) - 1));  
  69.                         $ruleReturn[$key][$i] = $fullstr[$rand];  
  70.                         break;  
  71.                 }  
  72.             }  
  73.         }  
  74.     }  
  75.     return $ruleReturn;  
  76. }  

 

 

相关文章
|
搜索推荐 Linux Python
VET:一个基于R语言的VCF数据提取工具,支持按基因ID、物理位置、样品名称提取指定变异信息
VET:一个基于R语言的VCF数据提取工具,支持按基因ID、物理位置、样品名称提取指定变异信息
|
5月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
10月前
|
监控 定位技术 PHP
使用PHP接入纯真IP库:实现IP地址地理位置查询
本文介绍了如何使用PHP接入纯真IP库(QQWry),实现IP地址的地理位置查询。纯真IP库是一个轻量级的IP数据库,数据格式简单,查询速度快,适合Web应用。首先,下载并放置`QQWry.dat`文件到项目目录。接着,通过编写PHP类解析该文件,实现IP查询功能。最后,提供了一个完整的案例演示,展示如何查询IP地址对应的国家和地区信息。该工具适用于用户地理位置分析、访问日志分析和风控系统等场景,具有轻量级、查询速度快、数据更新方便等优点。
|
11月前
|
监控 小程序 前端开发
微信小程序如何安装使用第三方包
本文档详细介绍了微信小程序开发中引入和使用第三方包的步骤。
1355 3
|
小程序 前端开发 JavaScript
小程序中wx:if 和hidden的区别
在微信小程序中,wx:if和hidden都是用于控制元素显示与隐藏的方法,但它们在工作原理和性能上存在显著差异。
392 3
ly~
|
消息中间件 存储 数据库连接
RocketMQ 消息的重试机制是怎样的?
RocketMQ的消息重试机制确保消息消费失败时能自动重试,直至成功。默认重试16次,时间间隔逐次翻倍,从10秒至数分钟不等。重试在同组内不同消费者间进行,由异常抛出或特定状态返回触发。支持自定义重试次数与时间间隔,建议合理配置避免无限重试,保障系统稳定性和性能。
ly~
3853 2
|
运维 监控 搜索推荐
【电商搜索】现代工业级电商搜索技术-Ha3搜索引擎平台简介
【电商搜索】现代工业级电商搜索技术-Ha3搜索引擎平台简介
|
存储 小程序 JavaScript
vscode设置自动保存步骤
vscode设置自动保存就不用每次要运行时候去先保存一下才能加载新页面了
19514 0
vscode设置自动保存步骤
|
自然语言处理 测试技术 计算机视觉
ICLR 2024:Time-LLM:基于大语言模型的时间序列预测
【2月更文挑战第28天】ICLR 2024:Time-LLM:基于大语言模型的时间序列预测
2320 1
ICLR 2024:Time-LLM:基于大语言模型的时间序列预测