php实现发卡
PHP实现发卡系统
发卡系统通常用于生成、管理和分发虚拟卡密(如充值卡、激活码等)。以下是实现发卡系统的关键步骤和代码示例。
数据库设计
创建存储卡密信息的数据库表:
CREATE TABLE `cards` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`card_number` varchar(50) NOT NULL,
`card_password` varchar(50) NOT NULL,
`card_type` varchar(20) NOT NULL,
`amount` decimal(10,2) DEFAULT NULL,
`status` tinyint(1) DEFAULT 0 COMMENT '0-未使用 1-已使用',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`use_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `card_number` (`card_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
生成卡密
使用PHP生成随机卡密并存入数据库:
function generateCards($count, $type, $amount = null) {
$db = new PDO('mysql:host=localhost;dbname=card_system', 'username', 'password');
$success = 0;
for ($i = 0; $i < $count; $i++) {
$cardNumber = strtoupper(uniqid('CARD').bin2hex(random_bytes(4)));
$cardPassword = substr(md5(uniqid().rand(1000,9999)), 0, 8);
$stmt = $db->prepare("INSERT INTO cards (card_number, card_password, card_type, amount)
VALUES (?, ?, ?, ?)");
if ($stmt->execute([$cardNumber, $cardPassword, $type, $amount])) {
$success++;
}
}
return $success;
}
导出卡密
将生成的卡密导出为CSV文件:
function exportCards($type) {
$db = new PDO('mysql:host=localhost;dbname=card_system', 'username', 'password');
$stmt = $db->prepare("SELECT card_number, card_password FROM cards WHERE card_type = ? AND status = 0");
$stmt->execute([$type]);
$cards = $stmt->fetchAll(PDO::FETCH_ASSOC);
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="cards_'.$type.'_'.date('Ymd').'.csv"');
$output = fopen('php://output', 'w');
fputcsv($output, ['卡号', '密码']);
foreach ($cards as $card) {
fputcsv($output, $card);
}
fclose($output);
exit;
}
验证卡密
验证卡密有效性并标记为已使用:
function verifyCard($cardNumber, $cardPassword) {
$db = new PDO('mysql:host=localhost;dbname=card_system', 'username', 'password');
$stmt = $db->prepare("SELECT * FROM cards WHERE card_number = ? AND status = 0");
$stmt->execute([$cardNumber]);
$card = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$card) {
return ['success' => false, 'message' => '卡号不存在或已被使用'];
}
if ($card['card_password'] !== $cardPassword) {
return ['success' => false, 'message' => '卡密不正确'];
}
$update = $db->prepare("UPDATE cards SET status = 1, use_time = NOW() WHERE id = ?");
if ($update->execute([$card['id']])) {
return ['success' => true, 'data' => $card];
}
return ['success' => false, 'message' => '系统错误'];
}
安全注意事项
- 使用HTTPS协议保护数据传输
- 对敏感操作进行权限验证
- 定期备份数据库
- 限制卡密生成和导出频率
- 使用预处理语句防止SQL注入
扩展功能
- 添加批量导入功能
- 实现卡密有效期设置
- 增加使用记录和日志功能
- 开发API接口供其他系统调用
- 添加卡密分类和统计功能
以上代码提供了发卡系统的基本框架,可根据实际需求进行调整和扩展。







