Помощ - Търси - Регистрирани - Календар
Пълна версия: Algoritym za EGN registraciq
UniBG Forums > Дискусии > Dexter's Lab > Програмиране
LordDoskias
QUOTE
<?php
function egn_gen() {
  $year = mt_rand(1, 99);
  if(strlen($year) == 1) { $year = 0 . $year; }
  $month = mt_rand(1, 12);
  if(strlen($month) == 1) { $month = 0 . $month; }
  $day = mt_rand(1,31);
  if(strlen($day) == 1) { $day = 0 . $day; }
  $digits = mt_rand(100, 999);
  $yc = $year[0] * 2 + $year[1] * 4;
        //1 poziciq    //2 poziciq
  $mc = $month[0] * 8 + $month[1] * 5;
            //3 poziciq  //4 poziciq
  $dc = $day[0] * 10 + $day[1] * 9;
        //5 poziciq    //6 poziciq
  $d3c = $digits[0] * 7 + $digits[1] * 3 + $digits[2] * 6;
      //7 poziciq      //8 poziciq      //9 poziciq

  $l = (($yc + $mc + $dc + $d3c) % 11);
  if($l < 10) {
    $control = $l;
  }
  else {
    $control = 0;
  }
  $egn = $year.$month.$day.$digits.$control;
  return $egn;
}
?>


Tova mi e koda. Vodq se po http://www.grao.bg/esgraon.html#section2

Postoqnno kontrolnata suma izliza greshna. Predpolagam 4e "Проверка на датата:

Проверяват се денят, месецът и годината за валидна дата. За родените преди 01.01.1900 г. към месеца се прибавя числото 20. За родените след 31.12.1999 г. към месеца се прибавя числото 40." na tazi proverka se 4upi gorniq kod. Makar 4e koda kakto se vijda generira godini meju 1900-1999 toest nqma nujda ot pribawqne na dopylnitelni 4isla. Vsqkakwi idei sa dobre do6li smile.gif
Yanek
QUOTE(LordDoskias @ Sep 21 2006, 01:10 AM)
Tova mi e koda. Vodq se po http://www.grao.bg/esgraon.html#section2

Postoqnno kontrolnata suma izliza greshna. Predpolagam 4e "Проверка на датата:

Проверяват се денят, месецът и годината за валидна дата. За родените преди 01.01.1900 г. към месеца се прибавя числото 20. За родените след 31.12.1999 г. към месеца се прибавя числото 40." na tazi proverka se 4upi gorniq kod. Makar 4e koda kakto se vijda generira godini meju 1900-1999 toest nqma nujda ot pribawqne na dopylnitelni 4isla. Vsqkakwi idei sa dobre do6li smile.gif
*


Предполагам, че вече си се оправил с кода, но ако не си - грешката ти е, че се опитваш да използваш числови променливи като масив. За съжаление ще ти е необходимо да го превърнеш в стринг поне. Значи опитвайки се да запазим кода с най малко промени, може би ще е нещо такова:
QUOTE
  $year = mt_rand(1, 99);
  if(strlen($year) == 1) { $year = "0" . $year; }
  //$year=strval($year); 
  $year=$year."";


По подобен начин ще бъдат и промените при останалите променливи. Преобразуването в стринг може да направиш и със strval, както е в коментара. Вместо strlen можеш направо да проверяваш дали променливата е по-малка от 9. Мисля, че така е по-оптимизиран вариант. Надолу сметките са ОК.
Това е семпла версия на форума. За да видиш пълната версия, която има повече информация, по-добра подредба и снимки, натисни тук.
Invision Power Board © 2001-2008 Invision Power Services, Inc.