簡體   English   中英

生成通過Luhn算法的16位數字

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM