Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
ВнизКак вам такой код? По-моему ужасно. Найти похожие ветки
← →
Карелин Артем (2003-06-26 13:01) [0]
function CheckINN(INN: String): Boolean;
// Проверяет корректность ИНН
type
TINNCo = array[1..12] of Byte;
const
INN10: TINNCo = (2, 4, 10, 3, 5, 9, 4, 6, 8, 0, 0, 0);
INN12_1: TINNCo = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0, 0);
INN12_2: TINNCo = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8, 0);
var
INNB: TINNCo;
i: Integer;
function GetINNCheckSum(INN: TINNCo; Co: TINNCo; CoLen: Byte): Integer;
var
i: Integer;
begin
Result := 0;
for i := 1 to CoLen do
Inc(Result, INN[i]*Co[i]);
Result := Result mod 11;
Result := Result mod 10;
end;
begin
INN := Trim(INN);
try
if not (Length(INN) in [10, 12]) then
Raise Exception.Create("INN length not correct");
for i := 1 to High(INNB) do
if i <= Length(INN) then
INNB[i] := StrToInt(INN[i])
else
INNB[i] := 0;
if Length(INN) = 10 then
begin
if StrToInt(INN[10]) <> GetINNCheckSum(INNB, INN10, 9) then
Raise Exception.Create("10 digit INN not correct")
end
else
begin
i := GetINNCheckSum(INNB, INN12_1, 10);
if StrToInt(INN[11]) <> i then
Raise Exception.Create("11 digit of 12 digits INN not correct")
else
begin
INNB[11] := i;
if StrToInt(INN[12]) <> GetINNCheckSum(INNB, INN12_2, 11) then
Raise Exception.Create("12 digit of 12 digits INN not
correct")
end;
end;
Result := True
except
Result := False
end;
end;
============================
← →
Johnmen (2003-06-26 13:18) [1]Забавно...:)
Откуда это чудо ?
← →
Карелин Артем (2003-06-26 13:23) [2]Johnmen © (26.06.03 13:18)
Говорят из самой налоговой.
← →
Юрий Федоров (2003-06-26 13:25) [3]>>Говорят из самой налоговой.
Вот так и живем :-)))
← →
Ihor Osov'yak (2003-06-26 13:27) [4]Как сказать.. Выбор имен - прекрасная иллюстрация на тему, как не нужно делать..
Форматирование - более менее, если не обращать внимание на то, что вложенная процедура не выделена форматированием..
Впечатление такое, что человек что-то читал о правильном оформлении кода, но не все, и не до конца, и не особо думая.
Или совсем не читал, а просто прошелся по своему коду каким-то утилем, делающим форматирование..
Плохо, если одним словом..
← →
Sha (2003-06-26 13:28) [5]Автор так это видит. Как думал, так и писал. Спасибо ему за алгоритм.
Переписать - однозначно.
← →
Карелин Артем (2003-06-26 13:30) [6]Кстати меня добивает название поля в одной таблице "INDEX".
← →
Карелин Артем (2003-06-26 13:30) [7]Таблица тоже оттуда.
← →
Danilka (2003-06-26 14:40) [8]Карелин Артем ©
Вот-такой пост здесь был пол-года назад, непомню чей. По-моему ты его видел, то-ли это был ответ на твою ветку, толи еще что. Я сохранил себе, на всяких случай - вдруг алгоритм проверки понадобится.
Проверка ИНН. Автор функции - А.Камбалов (ACampball@mail.ru)
Думаю, комментариев не надо
function CheckINN(const INN: string): Boolean;
const
factor1: array[0..8] of byte = (2, 4, 10, 3, 5, 9, 4, 6, 8);
factor2: array[0..9] of byte = (7, 2, 4, 10, 3, 5, 9, 4, 6, 8);
factor3: array[0..10] of byte = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8);
var
i: byte;
sum: word;
sum2: word;
begin
Result := False;
try
if Length(INN) = 10 then begin
sum := 0;
for i:=0 to 8 do
sum := sum + StrToInt(INN[i+1])*factor1[i];
sum := sum mod 11;
sum := sum mod 10;
Result := StrToInt(INN[10]) = sum;
end
else if Length(INN) = 12 then begin
sum := 0;
for i:=0 to 9 do
sum := sum + StrToInt(INN[i+1])*factor2[i];
sum := sum mod 11;
sum := sum mod 10;
sum2 := 0;
for i:=0 to 10 do
sum2 := sum2 + StrToInt(INN[i+1])*factor3[i];
sum2 := sum2 mod 11;
sum2 := sum2 mod 10;
Result := (StrToInt(INN[11]) = sum) and
(StrToInt(INN[12]) = sum2);
end; //
except
Result := False;
end; // try
end;
... ничего не напоминает? :))
← →
Danilka (2003-06-26 14:43) [9]хотя да, сильно отличаются, сходство почти что только в названии..
← →
Карелин Артем (2003-06-26 14:48) [10]На Королевстве есть путевая функция для этого дела.
← →
vuk (2003-06-26 14:57) [11]Не, ну разве это ужас? Вот FastReport - это да, действительно ужас. Однако ж ничего, народ пользуется...
← →
Mike B. (2003-06-26 15:21) [12]Вот вам ужас :)
правда на С
#include <stdio.h>
#include <stdlib.h>
#define m(x)(x<0?-1:!!x)
#define g tj()-J
#define a(x)(x<0?-x:x)
#define h(x)((x)<=K?x:N-(x))
#define f 9999
#define A return
#define H printf(
#define R double
#define U int
#define V for
#define b else
#define u while
#define B if
U v,w,Y= -1,W,J,p,F,o=f,M,N,K,X,YY,_,P[f],s(); typedef U(*L)(); L q[f]; tj(){
U S=m(v)+(m(w)<<K); B(!S)A J; V(v=W+S; v!=J&&!q[v]; v+=S); A v; } k(){ _=K; A
v?a(v)>1||w-Y||!q[J]:(w-Y&&(w-Y*2||q[W+Y*(N+1)]|| (J>>K)-K+(Y-1)/
v?a(v)>2))||q[J];
} z(){ _=5; A v*w||g; } e(){ _= -2;
A(v*v*v-v||w*w*w-w)&&(J-W-2||(W&N)-4||(W>>K!=(Y-1?N:0))||
q[W+1]||q[W+2]||q[W+K]!=z||P[W+K]*Y<0); } R VR(){ int PZ=0x7fff;
A(R)(rand()&PZ)/(R)PZ; } l(){ _=K+1; A(v*w&&a(v)-a(w))||g; } R UC(){ R i=0,d;
u((i+=d=VR())<1.0); A d; } c(){ _= -11; A a(v)-a(w)||g; } I(ur,n,x){ W=ur;
J=n; B(P[W]!=Y||P[J]==Y)A J+1; v=(J&N)-(W&N); w=(J>>K)-(W>>K); A
q[W]()||(x&&QL(W,J,s)); } TT(W){ v=w=0; A q[W]()+K; } s(){ U j= -1,i; Y= -Y;
V(i=0; i<M; ++i){ B(j<0&&P[i]== -Y&&TT(i)&&_== -2) { j=i; i= -1; } b
B(j>=0&&!I(i,j,0))A Y= -Y; } A!(Y= -Y); } bb(){ _=1; A a(v*w)-2; } uv(){
V(v=0; v<f; ++v){ B(h(v>>K)==0){ U S=h(v&N);
q[v]=!S?z:(S==1?bb:(S==2?c:(v&N>K?l:e))); } b B(h(v>>K)==1)q[v]=k; b q[v]=0;
P[v]=!!q[v]*(28-v); } } y(){ U G=Y,i; J=0; V(i=0; i<M; ++i){
i%8||H"\n%4o ",i); B((Y=P[i]=m(P[i]))&& TT(i))H"%c ",_+93+Y*16); b H"- "); }
H"\n "); do H"%2d",i++&N); u(i&N); Y=G; H"\n"); } O(W,J){
B((q[J]=q[W])==k&&h(J>>K)==0)q[J]=l; B(q[W]==e)B(J-W==2)O(J+1,J-1); b
B(W-J==2)O(W-1,W+1); P[J]=P[W]; q[W]=0; P[W]=0; } QL(W,J,D)L D; { U
HQ=P[J],YX; L AJ=q[J],XY=q[W]; O(W,J); YX=D(); O(J,W); q[J]=AJ; q[W]=XY;
P[J]=HQ; A YX; } C(){ U i,j,BZ=0; V(i=0; i<M; ++i){ L Z=q[i]; B(Z){ U
r=h(i>>K)+h(i&N),G=Y, S=Z==z?88:(Z==k?11 +r+(P[i]<0?N-(i>>K):(i>>K)):
(Z==l?124-((YY<8&&((i&N)!=K|| (i>>K)!=(P[i]>0?0:N)))?M:0):
(Z==c?41+r:(Z==e?f-r-r:36+r+r)))); Y=P[i]; V(j=0; j<M;
++j)B(!I(i,j,0))S+=(P[j]?5:1); BZ+=G==Y?S:-S; Y=G; } }
B(!(++X&M-1))write(1,".",1); A BZ; } PX(){ U i,Q=0,XP=0,JZ=M*M,E= -f,t,S=o;
B(!F--)A++F+C(); V(i=0; i<JZ; ++i)B(!I(i>>K+K,i&M-1,1)){ Y= -Y; o= -E; t=
-QL(i>>K+K,i&M-1,PX); Y= -Y; B(t>E){ ++XP; Q=i; E=t; B(E>=S) A++F,E; } }
B(!XP)E=s()?-f+1:0; p=Q; A++F,E; } RZ(){ U i,j,T=0; V(; ; ){ y(); o=f; do{
H"\n%d %d %d %s ",X,T,C(),s()?"!":">"); fflush(stdout); }
u(scanf("%o%o",&i,&j)!=2||I(i,j,1)); O(i,j); y(); X=0; ++YY; Y= -Y; T=PX();
i=p>>(K<<1); j=p&(M-1); B(I(i,j,1)){ H"Rats!\n"); A; } O(i,j); Y= -Y;
B(T>M*M)H"\nHar har.\n"); } } main(ac,av)char**av; { long
B(T>time(),j=time(&j);
R i=0; srand((U)j); V(M=0; M<=f; ++M)i+=UC(); M=i/100; B(M&3)++M; B(M&1)--M;
V(N=1; N*N<M; ++N); K= --N/2; F=ac>1?atoi(av[1]):2; uv(); RZ(); }
← →
Johnny Smith (2003-06-26 15:24) [13]2Mike B. © (26.06.03 15:21)
Сильно! :))))))))))
← →
gek (2003-06-26 15:27) [14]
> Mike B. © (26.06.03 15:21)
Это что, серьезно кто-то писал?
← →
Mike B. (2003-06-26 15:30) [15]Значит так, мне сказали что это дело - лабораторная работа, которую один студент сдал своему "любимому" преподавателю. Утверждают что все работает. Я не проверял, мне и так достаточно :)
← →
uw (2003-06-26 15:37) [16]#define a(x)(x<0?-x:x) неграмотно написано, но при попутном ветре сработает.
← →
Johnny Smith (2003-06-26 15:37) [17]2Mike B. © (26.06.03 15:30)
Значит так, мне сказали что это дело - лабораторная работа, которую один студент сдал своему "любимому" преподавателю. Утверждают что все работает. Я не проверял, мне и так достаточно :)
Не. Не работает. И даже не компилится.
Синтаксические ошибки и undeclared identifier"ы.
Исправлять неохота.
← →
Mike B. (2003-06-26 15:43) [18]> Johnny Smith © (26.06.03 15:37)
И слава богу. Не хватало чтобы это еще и работало
← →
Andrey (2003-06-26 16:21) [19]
unless ($login=~/^[\w _]{1,30}$|^[ а-яА-Я0-9_]{1,30}$/)
И это работает... правда на perl-е, но тем не менее :)
или такой кусочек :)
s/^\s+//;
while ($_ ne "") {
$field = "";
for (;;) {
if (s/^"(([^"\\]|\\.)*)"//) {
($snippet = $1) =~ s#\\(.)#$1#g;
}
elsif (/^"/) {
die "Unmatched double quote: $_\n";
}
elsif (s/^"(([^"\\]|\\.)*)"//) {
($snippet = $1) =~ s#\\(.)#$1#g;
}
elsif (/^"/) {
die "Unmatched single quote: $_\n";
}
elsif (s/^\\(.)//) {
$snippet = $1;
}
elsif (s/^([^\s\\""]+)//) {
$snippet = $1;
}
else {
s/^\s+//;
last;
}
$field .= $snippet;
}
push(@words, $field);
}
@words;
← →
Sha (2003-06-26 16:41) [20]Я вот тут ИНН переписал. Отнеситесь доброжелательно :)
//Проверяет корректность ИНН
function IsValidINN(const s: string): boolean;
function IsSumOK(const s: string; last: integer): boolean;
const
coef: array[1..11] of byte = (3, 7, 2, 4, 10, 3, 5, 9, 4, 6, 8);
var
sumOK, sum, ofs, val: integer;
begin;
sumOK:=ord(s[last+1]) - ord("0");
sum:=0;
ofs:=High(coef)-last;
repeat;
val:=ord(s[last]) - ord("0");
if (val>=0) and (val<=9) then inc(sum, val * coef[last + ofs]) else last:=0;
dec(last);
until last<=0;
Result:=(last=0) and ((sum mod 11) mod 10 = sumOK);
end;
var
len: integer;
begin;
len:=Length(s);
if len=10
then Result:=IsSumOK(s,len-1)
else if len=12
then Result:=IsSumOK(s,len-2) and IsSumOK(s,len-1)
else Result:=false;
end;
procedure TForm1.Edit1Change(Sender: TObject);
const
cl: array[boolean] of TColor= (clRed, clBlack);
begin
Edit1.Font.Color:=cl[IsValidINN(Trim(Edit1.Text))];
end;
← →
Fantasist. (2003-06-26 17:27) [21]
> Вот вам ужас :)
> правда на С
Умельцы писали программы, для конвертации нормального исходного кода в подобное чудо. В принципе, ничего сложного.
← →
Sha (2003-06-26 17:44) [22]Fantasist. (26.06.03 17:27)
У меня однажды заказчик при сдаче проги внезапно захотел получить исходники, разумеется, бесплатно.
Пришлось все имена переменных и процедур в программе сделать из трех букв, и на каждой строке операторы собрать до длины 80. Длинными остались только имена из TPCRT. Смотрелось это весело.
← →
Странник (2003-06-26 17:47) [23]> Вот вам ужас :)
> правда на С
не помню уж, как называется, но такие утилитки используются для конвертации java-кода, для убирания осмысленности при взломе.
← →
mrcat (2003-06-26 17:55) [24]Sha © (26.06.03 17:44)
видать программа маленькая была, коли 3-х буквенных комбинаций хватило? ;)
← →
Игорь Шевченко (2003-06-26 18:00) [25]Sha © (26.06.03 16:41)
А все равно, непонятно. Уж переписывать, так с комментариями и с приличными именами переменных и функций
← →
Sha (2003-06-26 18:02) [26]mrcat © (26.06.03 17:55)
1500 строк
← →
Sha (2003-06-26 18:11) [27]Игорь Шевченко © (26.06.03 18:00)
Да нет, надо было наоборот, не дать исходники. Кстати все комментарии были убраны.
Заказ был изначально сделан на минимальную сумму с обещанием со стороны заказчика продолжить сотрудничество при благоприятном результате. В процессе сдачи у заказчика появляется желание продолжить работу силами своих программистов. При этом он заявляет, что неприменным условием оплаты заказа является сдача исходников, хотя этого в договоре не было. Чтобы получить хоть какие-то деньги, пришлось все это проделать.
← →
Soft (2003-06-26 18:20) [28]А как вам такой
procedure TCharGenForm.WriteMarking;
var i:integer;
var Rect:TRect;
begin
//
← →
Sha (2003-06-26 18:31) [29]Soft © (26.06.03 18:20)
Автор не девушка, случайно?
← →
Игорь Шевченко (2003-06-26 18:36) [30]Sha © (26.06.03 18:11)
Да я про функцию с ИНН :))
← →
Asteroid (2003-06-26 18:38) [31]> Soft © (26.06.03 18:20)
Изврат, однако...
К сожалению, не сохранился кусок "отличного" кода. Но в нем было порядка 32-х меток, в каждой одна строчкой символов на 200 - и в конце goto :)
← →
Sha (2003-06-26 18:54) [32]>Игорь Шевченко
>А все равно, непонятно. Уж переписывать, так с комментариями и с приличными именами переменных и функций
>Да я про функцию с ИНН :))
Согласен, пара комментариев не помешала бы. Да выбором имен и не затруднял себя (особенно не нравится last:). Хотел только алгоритм прояснить и лишнее убрать. Ненавижу вызывать и обрабатывать исключения там, где можно без них. Тем более, что в оригинале при неверном 10 знаке возможно возникновение разных исключений.
← →
Soft (2003-06-26 18:55) [33]>>Sha © (26.06.03 18:31)
>>Автор не девушка, случайно?
Код моей программы, которую нужно было написать за день, а потом равнять было влом... и так все работает без глюков.
← →
Soft (2003-06-26 19:02) [34]А вообще все мои программы написаны в подобном стиле, иногда с именами переменных длинными, но понятными только мне с хитрыми функциями и все отлично работает:)
Мой код должен быть понятен только двоим: мне и компилятору!
Видели бы вы код нашего ведущего программиста:) Кстати я тоже ведущий программист:)
← →
Sha (2003-06-26 19:07) [35]Soft © (26.06.03 18:55)
Давно заметил одну особенность женского вкуса: им почему-то нравятся последовательности одинаковых или очень похожих операторов. А твой длинный case должен приводить их в полный восторг :)
← →
Soft (2003-06-26 19:17) [36]>>Sha © (26.06.03 19:07)
>>Давно заметил одну особенность женского вкуса: им почему-то нравятся последовательности одинаковых или очень похожих операторов. А твой длинный case должен приводить их в полный восторг :)
Так Делфи это не C++:( В C Switch удобнее
← →
Andrey (2003-06-26 19:49) [37]
> Мой код должен быть понятен только двоим: мне и компилятору!
Вот откуда берутся программы в стиле write only :)))
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.008 c