2010-07-08 2 views
0

Я хотел бы сгенерировать буквенно-цифровой идентификатор сотрудника в PHP, например. EP0001Генерировать алфавитно-цифровой идентификатор сотрудника

Любые идеи?

+0

как вы хотите создать что, больше деталей, пожалуйста. – Sarfraz

+0

Вы используете какую-либо базу данных? Postgresql предлагает таблицы последовательностей, в которых вы можете получить последовательности и поточно-безопасные. – pakore

+0

Есть ли причина, почему вы не хотите делать это в dabatase? –

ответ

4

Нам понадобится больше, чем это, чтобы помочь вам, но это то, что я буду делать.

Предполагая EP является началом каждого алфавитно-цифровой идентификатор сотрудника, то

<?php 
$number = getTotalEmployees(); 

$id = 'EP'.$number; 

function getTotalEmployees() { 
    $num = 'Get number of Employees from database'; 
    ++$num; // add 1; 

    $len = strlen($num); 
    for($i=$len; $i< 4; ++$i) { 
     $num = '0'.$num; 
    } 
    return $num; 
} 
?> 

UPDATE

Благодаря Trefex Если вы используете MySQL, вы можете хранить идентификатор сотрудника в поле и установите атрибут ZEROFILL. Таким образом, вы не должны иметь дело с нулями в PHP

<?php 
function getTotalEmployees() { 
    $num = 'Get number of Employees from database'; 
    ++$num; // add 1; 
    return $num; 
} 
?> 
+1

Если вы используете MySQL, вы можете сохранить идентификатор сотрудника в поле и установить атрибут ZEROFILL. Таким образом, вам не нужно иметь дело с нулями в PHP. – Trefex

+2

без блокировки таблицы, у вас здесь есть состояние гонки. –

+0

Кроме того, менее подробный способ для заполнения будет возвращать sprintf ('% 04d', $ num); –

0

Вы можете перейти на следующий код, если вы ищете случайных идентификаторов

<?php 
    $numchars = rand(4,15); //You can specify the length here 
    //This is the list from which id is generated. 
    $chars = explode(',','a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,0,1,2,3,4,5,6,7,8,9'); 
    $random=''; 
    //Do a random generation in a for loop 
    for($i=0; $i<$numchars;$i++) { 
    $random.=$chars[rand(0,count($chars)-1)]; 
    } 
    //Here you go.. Nice & pretty 
    echo $random; 

?> 

Вы можете найти это более & в сама Google

http://www.webmaster-talk.com/php-forum/29621-php-randomly-generate-alphanumeric-charachters.html

+0

Нет необходимости в слове с массивами; вы также можете получить доступ к строкам с синтаксисом '$ str [12345]'. – Gumbo

1

Просто делать их последовательно, нет необходимости в данных «Кодекс» в число таких поскольку «E означает, что он является сотрудником уровня предприятия, а P означает, что он паркован в P-лоте». Это устаревший способ делать вещи, которые подкрались до того, как существовали базы данных. Кодирование специальных значений в уникальный идентификатор, который может измениться, будет кошмаром, нет необходимости делать это, и это плохой дизайн базы данных.

В качестве альтернативы, если эти числа подвержены некоторому уровню мошенничества, они генерируют их в непоследовательном методе, таком как генерирование psudo-random UID и проверка того, используется ли он или нет, а затем назначая его.

0

Попробуйте следующий код:

$auto='Select all documents from your database'; 
$inc=count($auto)+1;//count of number of documents 
$unique_id='Emp_'.str_pad($inc, 3, "0", STR_PAD_LEFT); 
Смежные вопросы