Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Алгоритм формирования контрольного числа страх.номера / 17 сообщений из 17, страница 1 из 1
12.03.2015, 15:59
    #38902651
alexwechsel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Добрый день, не подскажите как лучше сделать такую вещь?

Алгоритм формирования контрольного числа Страхового номера
Проверка контрольного числа Страхового номера проводится только для номеров больше номера 001-001-998
Контрольное число Страхового номера рассчитывается следующим образом:
- каждая цифра Страхового номера умножается на номер своей позиции (позиции отсчитываются с конца)
- полученные произведения суммируются
- сумма делится на 101
- последние две цифры остатка от деления являются Контрольным числом.
Например: Указан страховой номер 112-233-445 95
Проверяем правильность контрольного числа:
цифры номера 1 1 2 2 3 3 4 4 5
номер позиции 9 8 7 6 5 4 3 2 1
1 x 9 + 1 x 8 + 2 x 7 + 2 x 6 + 3 x 5 + 3 x 4 + 4 x 3 + 4 x 2 + 5 x 1 = 95
95 / !101! = 95
Контрольное число = 95 - указано верно
Некоторые частные случаи:
99 / !101! = 99
100 / !101! = 00
101 / !101! = 00
102 / !101! = 01
...
Рейтинг: 0 / 0
12.03.2015, 17:24
    #38902853
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Что конкретно не получается?
...
Рейтинг: 0 / 0
12.03.2015, 18:34
    #38902954
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Держи
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
? CheckNom('112-233-445 95')

func CheckNom
lpara tcNom
LOCAL i, j, lcMask, lnSum, lnVal 
tcNom = alltrim(tcNom)
lcMask = chrtran(tcNom, '1234567890', '***********')
if lcMask != '***-***-*** **'
	? 'Неверный формат'
else
	lnVal = val(left(chrtran(alltrim(tcNom), lcMask, ''), 9))
	if lnVal <= 1001998
		? 'Не проверяется'
		return .T.
	endif
	lnSum = 0
	for i = 1 to 9
		j = lnVal % 10
		lnVal = (lnVal - j) / 10
		lnSum = lnSum + i * j
	endfor
	if lnSum % 101 % 100 = val(right(tcNom, 2))
		return .T.
	endif
endif
return .F.
...
Рейтинг: 0 / 0
12.03.2015, 19:56
    #38903052
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Dima TДержи


Наворотил ... вместо VAL(SUBSTR(tcString,i,1))
и RETURN MOD(...) = VAL(RIGHT(tcString,2))
...
Рейтинг: 0 / 0
12.03.2015, 20:05
    #38903058
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
sg12Dima TДержи


Наворотил ... вместо VAL(SUBSTR(tcString,i,1))
и RETURN MOD(...) = VAL(RIGHT(tcString,2))
Ты полный код дай, а то скулишь за то что ответы неполные, а сам?
...
Рейтинг: 0 / 0
12.03.2015, 20:38
    #38903087
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Dima T

Вы ведь не новичок, а тоже "дай", с такой-то подсказкой ...
Да и новичок этот не промах, решил вместо своей головы чужой поработать.

Код не проверял, текст навскидку, доведете до ума:
tcString = CTRTRAN(tcStrng,'-','')
j = 0
FOR i = 1 TO 9
j = j + (10-i)*VAL(SUBSTR(tcString,i,1))
ENDFOR
RETURN MOD(j,101) = VAL(RIGHT(tcString,2))
...
Рейтинг: 0 / 0
12.03.2015, 20:51
    #38903096
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
sg12Код не проверял, текст навскидку, доведете до ума:
А мне-то оно зачем доводить? Я выше доведенный и проверенный привел.

Я тебя не пойму, ты со своими обидами на фокс, на котором вынужден писать, тут тролишь, какие-то обязанности всем придумываешь... оно тебе надо?
...
Рейтинг: 0 / 0
12.03.2015, 21:06
    #38903109
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Dima T

Что-то нервно ты на все реагируешь, цепляешься ...
Нравится тебе твой код, да на здоровье.
...
Рейтинг: 0 / 0
12.03.2015, 21:43
    #38903133
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
sg12Dima T

Что-то нервно ты на все реагируешь, цепляешься ...
Нравится тебе твой код, да на здоровье.
Я не психиатр, но даже мне виден твой неадекват. Без обид, ты мне ничего плохого не сделал, я по доброму тебе советую - займись тем что тебе интересно, ты не тупой, деньги сами прийдут, лично я всегда так поступал, и сейчас, в очередной кризис, забил на все и просто усиленно делаю что хочу сделать.
...
Рейтинг: 0 / 0
12.03.2015, 22:01
    #38903152
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Dima T, ну не волнуют меня твои психиатрические проблемы.

Вон на фоксклубе еще код выложили, поинтересуйся для развития кругозора.
Да и с MOD() оказывается у меня не все сходится.
...
Рейтинг: 0 / 0
12.03.2015, 22:09
    #38903161
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
MOD() и % одно и то же.
...
Рейтинг: 0 / 0
12.03.2015, 22:36
    #38903188
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Dima TMOD() и % одно и то же.

Вот и хорошо, раз успокоились.
А то я грешным делом подумал, что вы своим опытом компетентно делитесь.

% это FPD, а в VFP - MOD(), правила хорошего тона.
Но здесь с MOD проблема другая, двойное деление.

А вот проверку я бы оставил, стандарт все-таки:
IF !(CHRTRAN(tcString,'1234567890','***********') == '***-***-*** **')
RETURN .F.
ENDIF
И в tcStrng у меня буква пропущена, исправьте у себя.
...
Рейтинг: 0 / 0
12.03.2015, 22:59
    #38903200
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
sg12% это FPD, а в VFP - MOD(), правила хорошего тона.

с чего вдруг? Дай ссылку на те "правила хорошего тона"
...
Рейтинг: 0 / 0
12.03.2015, 23:13
    #38903203
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Dima Tsg12% это FPD, а в VFP - MOD(), правила хорошего тона.

с чего вдруг? Дай ссылку на те "правила хорошего тона"

Зато теперь вы знаете, не спутаете.
На сайте Microsoft было пояснение, придется вам самим там погуглить, не буду же я на каждое слово ссылки собирать.
...
Рейтинг: 0 / 0
13.03.2015, 10:25
    #38903441
alexwechsel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Dima T,
Спасибо большое, очень выручил! Может посоветуешь, по какой книге удобнее учить фокс?:)
...
Рейтинг: 0 / 0
13.03.2015, 10:44
    #38903468
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
alexwechselDima T,
Спасибо большое, очень выручил! Может посоветуешь, по какой книге удобнее учить фокс?:)
Лично мне больше всего понравилось М. Базиян "Использование Visual FoxPro 6"
То что 6 не пугайся, в целом принципы не поменялись.
Затем что новое в 9-ке появилось - по любой книжке для 9-ки.
...
Рейтинг: 0 / 0
13.03.2015, 12:54
    #38903712
sg12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Алгоритм формирования контрольного числа страх.номера
Можно еще добавить, что на календаре все-таки 2015 год, а не 2005, в котором по традиции топикстартер и застрянет.
И выучит он таким путем фокс как раз к пенсии, если к тому времени ПФР все еще будет сидеть на VFP.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Алгоритм формирования контрольного числа страх.номера / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]