2011-01-19 3 views

ответ

0

проверки IMEI использует алгоритм проверки Луна. Я нашел ссылку на страницу, где вы можете проверить свой IMEI. Кроме того, внизу этой страницы находится фрагмент кода, написанный на JavaScript, чтобы показать, как вычислить 15-ю цифру IMEI и действительный IMEI. Я мог бы дать вам некоторые идеи. Вы можете проверить его здесь http://imei.sms.eu.sk/index.html

1

Может может помочь вам:

This IMEI number is something like this: ABCDEF-GH-IJKLMNO-X (without “-” characters) 

For example: 350077523237513 

In our example ABCDEF-GH-IJKLMNO-X: 

AB is Reporting Body Identifier such as 35 = “British Approvals Board of Telecommunications (BABT)” 

ABCDEF is Type Approval Code 

GH is Final Assembly Code 

IJKLMNO is Serial Number 

X is Check Digit 

Кроме того, это может помочь вам: http://en.wikipedia.org/wiki/IMEI#Check_digit_computation

Если я не понял, номер IMEI с помощью алгоритма Luhn. Таким образом, вы можете Google это :) Или вы можете искать IMEI алгоритм

1

Может быть, ваш хорошо с Imei валидатора в комментариях здесь: http://www.php.net/manual/en/function.ctype-digit.php#77718

Но я не проверял

+0

Есть номера IMEI с 14 15 и 16 цифр также есть номера IMEI, содержащие не только цифры –

+0

номера @VladimirGatev IMEI являются 14 цифр + 1 контрольная сумма. Номера IMEISV - 14 цифр + 2 номера версии программного обеспечения. Кроме того, некоторые производители добавляют к концу IMEI такие вещи, как '01', но это можно игнорировать во всех случаях, которые я видел. – rybo111

+0

Каспер - пожалуйста, вы можете отправить код, на который это ссылается? – rybo111

5

Короткое решение

Вы можете использовать this (witchcraft!) solution, а просто проверить длину строки:

function is_luhn($n) { 
    $str = ''; 
    foreach (str_split(strrev((string) $n)) as $i => $d) { 
     $str .= $i %2 !== 0 ? $d * 2 : $d; 
    } 
    return array_sum(str_split($str)) % 10 === 0; 
} 
function is_imei($n){ 
    return is_luhn($n) && strlen($n) == 15; 
} 

Подробное решение

Вот моя оригинальная функция, которая объясняет каждый шаг:

function is_imei($imei){ 
    // Should be 15 digits 
    if(strlen($imei) != 15 || !ctype_digit($imei)) 
     return false; 
    // Get digits 
    $digits = str_split($imei); 
    // Remove last digit, and store it 
    $imei_last = array_pop($digits); 
    // Create log 
    $log = array(); 
    // Loop through digits 
    foreach($digits as $key => $n){ 
     // If key is odd, then count is even 
     if($key & 1){ 
      // Get double digits 
      $double = str_split($n * 2); 
      // Sum double digits 
      $n = array_sum($double); 
     } 
     // Append log 
     $log[] = $n; 
    } 
    // Sum log & multiply by 9 
    $sum = array_sum($log) * 9; 
    // Compare the last digit with $imei_last 
    return substr($sum, -1) == $imei_last; 
} 
0

хорошее развлечение от kasperhartwich

function validateImei($imei, $use_checksum = true) { 
    if (is_string($imei)) { 
    if (ereg('^[0-9]{15}$', $imei)) { 
     if (!$use_checksum) return true; 
     for ($i = 0, $sum = 0; $i < 14; $i++) { 
     $tmp = $imei[$i] * (($i%2) + 1); 
     $sum += ($tmp%10) + intval($tmp/10); 
     } 
     return (((10 - ($sum%10)) %10) == $imei[14]); 
    } 
    } 
    return false; 
} 
Смежные вопросы