|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
Тъп въпрос !
|
|
Автор |
Mave_rick (Toma6) |
Публикувано | 29.05.03 01:50 |
|
Някой да знае, как се проверява валидност на ЛНЧ или БУЛСТАТ ?
| |
|
виж
Ама ако ползваш данъчния номер - този алгоритъм който съм публикувал - май има някакъв проблем- само за някои номера - което е много странно.
---
Е т'ва е живот!
| |
|
Мерси :)
Това с БУЛСТАТ върви (поне на мен така ми се струва).
Ама не намерих нищо из интернет за ЛНЧ(ЕНЧ).
| |
|
unit EGNCheck;
interface
const EGN_Mod_11_Coef : array[1..9] of byte = (2,4,8,5,10,9,7,3,6);
type EGNString = string[10];
{Проверява ЕГН}
function CheckEGN(EGN : EGNString) : boolean;
{}
function CheckEGN_Mod11(EGN : EGNString) : boolean;
{}
function CheckEGN_Date(EGN : EGNString) : boolean;
{Взема дата от ЕГН}
function GetDateFromEGN(EGN : EGNString) : TDateTime;
{Проверява дали годината е високосна}
function LeapYear(Year : word) : boolean;
{Образува ЕГН от подадена дата, като последните 4 символа са нули}
function DateToEGNwith0(Date : TDateTime): string;
implementation
uses SysUtils;
function DateToEGNwith0(Date : TDateTime): string;
var Y,M,D : word;
S : string[10];
begin
DecodeDate(Date,Y,M,D);
if (Y >=1800) and (Y<=1899) then
M := M + 20;
if (Y >=1900) and (Y<=1999) then M := M + 0;
if (Y >=2000) then M := M + 40;
Result := Copy(IntToStr(Y),3,2);
S := IntToStr(M);
if Length(S) = 1 then S := '0' + S;
Result := Result + S;
S := IntToStr(D);
if Length(S) = 1 then S := '0' + S;
Result := Result + S + '0000';
end;
function GetDateFromEGN(EGN : EGNString) : TDateTime;
var Y,M,D : word;
begin
Y := StrToInt(Copy(EGN,1,2));
M := StrToInt(Copy(EGN,3,2));
D := StrToInt(Copy(EGN,5,2));
if M > 20 then
begin
if M > 40 then begin
M := M - 40;
Y := Y + 2000;
end
else begin
M := M - 20;
Y := Y + 1800;
end
end
else Y := Y + 1900;
try
Result := EncodeDate(Y,M,D);
except
on EConvertError do
begin
Result := 0;
end;
end;
end;
function LeapYear(Year : word) : boolean;
begin
if (Year mod 4 <> 0) then
Result := False
else if (Year mod 100 <> 0) then
Result := true
else if (Year mod 400 <> 0) then
Result := False
else Result := True;
end;
function CheckEGN_Date(EGN : EGNString) : boolean;
var Y,M,D : word;
begin
Y := StrToInt(Copy(EGN,1,2));
M := StrToInt(Copy(EGN,3,2));
D := StrToInt(Copy(EGN,5,2));
if M > 20 then
begin
if M > 40 then begin
M := M - 40;
Y := Y + 2000;
end
else begin
M := M - 20;
Y := Y + 1800;
end
end
else Y := Y + 1900;
Result := True;
try
EncodeDate(Y,M,D);
except
on EConvertError do
begin
Result := False;
end;
end;
end;
function CheckEGN_Mod11(EGN : EGNString) : boolean;
var i,M : integer;
begin
if EGN[0] < #10 then
begin
Result := False;
exit;
end;
M := 0;
for i := 1 to 9 do
begin
M := M + StrToInt(EGN)*EGN_Mod_11_Coef;
end;
M := (M mod 11) mod 10;
Result := StrToInt(EGN[10]) = M;
end;
function CheckEGN(EGN : EGNString) : boolean;
begin
Result := CheckEGN_Mod11(EGN) and CheckEGN_Date(EGN);
end;
end.
Никога не е късно човек да се провали!
| |
|
това е за ЕГН, и изглежда правилно... обаче дали и за ЛНЧ е така?
из разните правителствени ситове пише: "
...ЛНЧ се формира по начин указан от министерския съвет..."
който начин по никой начин неможах да намеря...
--------------------------------------
Започва Път от моят праг...
| |
|
Мисля, че ЛНЧ е аналог на ЕГН но на чужденци.
Мога да питам но сага нямам време
Никога не е късно човек да се провали!
| |
|
Не е едно и също.
В ЛНЧ няма дати на райдане и др.
За моито номера с контролната сума става, ама пробвах още едно и се оказа, че не става (или ЛНЧ-то е объркано).
| |
|
Уточнение ЛНЧ = ЕГН за български граждани, за чуждите е друго - естествено е да не можеш да го провериш с този алгоритъм. Това е според моите скромни познания - не съм чул за промяна все още - но ако трябва ще проверя. Според новите изисквания на НОИ - ЛНЧ за чужденците се попълва дата месец и година на раждане + пол! За нашите ЕГН -та няма нужда от това.
---
Е т'ва е живот!
| |
|
Адреса на дава подробна информация за ЕГН-то. Но никъде не можах да намеря как се формира ЛНЧ освен в ЗАКОН ЗА БЪЛГАРСКИТЕ ДОКУМЕНТИ ЗА САМОЛИЧНОСТ.
Раздел III
Данни в българските документи за самоличност
Чл.16. (1) Българските документи за самоличност съдържат следните задължителни лични данни:
1. имена;
2. дата на раждане;
3. единен граждански номер (или личен номер за чужденец);
4. пол;
5. гражданство.
(2) Наименованието на данните по ал.1 се изписват на български и английски език.
(3) (нова,ДВ,бр.67 от 1999 г.) Личният номер за чужденец (ЛНЧ) идентифицира еднозначно дългосрочно пребиваващите чужденци в Република България. Начинът на неговото формиране се определя от Министерския съвет.
Никъде официално не е публикуван начина за това формиране.
Един колега каза, че може да го намери но още не се е обадил.
Чакам. Ще го публикувам веднага когато ми стнаое ясно нещо по въпроса.
Никога не е късно човек да се провали!
| |
|
ЛНЧ.
За ЛНЧ (n1n2n3n4n5n6n7n8n9n10)
(n1*21+n2*19+n3*17+n4*13+n5*11+n6*9+n7*7+n8*3+n9*1) MOD 10 =n10
т.е. теглата са 21,19,17,13,11,9,7,3,1
Същото е както ЕГН но теглата са други и се дели на 10 а не на 11.
БУЛСТАТ
има инфо "Структура на ЕИК"
Никога не е късно човек да се провали!
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|