![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уникальный код [D7, WinXP]
fisherman © (2007-08-09 14:17:00)Всем привет!
Подскажите, есть у Делфи функция формирующая уникальный код
antonn (2007-08-09 16:32:00) [1]
> И какого лешего ты постишь вопрос здесь, а не в форуме по
> базам данных ?
затоптал%)
DVM (2007-08-09 16:28:00) [2]GUID статистически уникален, но абсолютная уникальность не гарантирована.
{RASkov} (2007-08-09 16:26:00) [3]Последний пост из той ветки:
[9] {RASkov} © (15.05.07 18:21)
В общем остановился на этом (может кому и пригодится):
function GetDID(const F12Ch: Boolean=True): String;
const Ch: array [0..25] of Char = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
MAXCHAR = 3-1;
var ArrPosCh: array [0..MAXCHAR] of Byte;
SetPosCh: set of Byte;
N, K, J, Min, TmpI: Byte;
begin
for N:= 0 to MAXCHAR do ArrPosCh[N]:=0;
N:=0; SetPosCh:=[];
Result:=IntToStr(Round((Now-RoundTo(Now, 2))*10000000));
Randomize; J:=Length(Result)-(2-ORD(F12Ch));
while N<=MAXCHAR do begin
K:=2+Random(J);
if not ((K in SetPosCh) or (Pred(K) in SetPosCh) or (Succ(K) in SetPosCh)) then begin
Include(SetPosCh, K);
ArrPosCh[N]:=K;
INC(N);
end;
end;
if F12Ch then begin
for N:=0 to MAXCHAR do begin
Min:=N;
for J:=N+1 to MAXCHAR do
if ArrPosCh[J] < ArrPosCh[Min] then Min:=J;
TmpI:=ArrPosCh[N];
ArrPosCh[N]:=ArrPosCh[Min];
ArrPosCh[Min]:=TmpI;
end;
for N:= 0 to MAXCHAR do Insert(Ch[Random(26)], Result, ArrPosCh[N]+N);
end else for N:= 0 to MAXCHAR do Result[ArrPosCh[N]]:=Ch[Random(26)];
end;
Я подозреваю, что совпадений "не будет никогда". ) С условием, что генериться будет минимум один раз на одном компе. Естественно, если в базе уже будет такой идентификатор, то процедура повториться. Я вот думаю, тот ли участок взял из числа (дата+время) или лишнего от начала отсек....
Кстати, может и не надо символы вставлять, тогда и получится число(как я и хотел)?
> [7] Gydvin © (15.05.07 07:22)
Не понял вопроса... в чем смысл функции? - ты спрашиваешь... А неужели не понятно, да и расписывал про все это зря что ли....
> [8] Kolan © (15.05.07 07:46)
GUID и обреж
Тоже вариант....
Ладно... всем спасибо за участие ;)
l_v (2007-08-09 16:25:00) [4]
> {RASkov} © (09.08.07 16:22) [11]
Произошла ошибка:
Не найдена ветка № 1179178018, возможно она была удалена или перенесена в другой форум.
Назад
(c) Мастера DELPHI
{RASkov} (2007-08-09 16:22:00) [5]Как-то не больно давно я тоже такой "ерундой" страдал :) Вот:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1179178018
Можно и под "числовой" переделать....
Leonid Troyanovsky (2007-08-09 15:45:00) [6]
> fisherman © (09.08.07 14:47) [6]
> FoxPro, и там используется функция sys(3) возвращающая уникальный
> 8-ми знаковый числовой код.
> Вот что-то наподобие этого надо
Value := Format('%8.8d', [Random(100000000)]);
--
Regards, LVT.
tesseract (2007-08-09 15:38:00) [7]
> не совсем то, мне надо заносить в DBF-ку онформацию и каждой
> записи присваивать уникальный код.
Автоинкрементые поля уходят в Ж ?
l_v (2007-08-09 15:01:00) [8]Shift+Ctrl+G... :)
правда стринг, и правда он тебе совсем неподходит... :)
Сергей М. (2007-08-09 14:56:00) [9]
> мне надо заносить в DBF-ку онформацию и каждой записи присваивать
> уникальный код
Чем же не устроил уникальный GUID ?
И слышал ли ты хоть что-либо о генераторах автоинкрементных целочисленных значений ?
И какого лешего ты постишь вопрос здесь, а не в форуме по базам данных ?
fisherman (2007-08-09 14:47:00) [10]
> CreateGUID()
не совсем то, мне надо заносить в DBF-ку онформацию и каждой записи присваивать уникальный код.
База данных используется другой программой написанной на FoxPro, и там используется функция sys(3) возвращающая уникальный 8-ми знаковый числовой код.
Вот что-то наподобие этого надо
tesseract (2007-08-09 14:34:00) [11]for i:=1 to 99 do
begin
unicode:=unicode+strtoint(random(99));
end;
fisherman (2007-08-09 14:26:00) [12]спасибо, сейчас попробую
Jeer (2007-08-09 14:25:00) [13]
> формирующая уникальный код
твоего нового уникального приложения ?
Сергей М. (2007-08-09 14:21:00) [14]CreateGUID устроит ?
Rouse_ (2007-08-09 14:21:00) [15]CreateGUID()