[英]Generate 16 digit number that passes Luhn algorithm
我正在嘗試生成通過 Luhn 算法驗證的 16 位數字。 例如,如果我為一張以 37 開頭的美國運通卡生成 16 位數字
像這樣的東西
3789 1477 0763 171(這將通過 Luhn 算法)
我能夠生成 16 位數字,但它不會通過 Luhn 算法。
<?php
function generatenumber($limit, $prefix){
$code = '';
for($i = 0; $i < $limit; $i++) {
$code .= mt_rand(0, 9);
}
return $prefix.$code;
}
generatenumber(14,37);
3711414458103430 // This wouldn't pass the Luhn algorithm verification)
?>
這是您可以嘗試的嘗試:
<?php
function generate_numbers($limit, $prefix) {
$digits = substr(str_shuffle(str_repeat('0123456789', $limit)), 0, $limit - 1);
$sum = 0;
foreach (str_split(strrev($digits)) as $i => $digit) {
$sum += ($i % 2 == 0) ? array_sum(str_split($digit * 2)) : $digit;
}
return $prefix . $digits . (10 - ($sum % 10)) % 10;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.