download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Дълга формула на ексел - разбиване

Автор
Съобщение
insecteater
Чет, 06.12.12, 12:28
Здравейте,
опитвам се да обърна една екселска формула в аналога и в php, но все не мога да си събера акъла да го направя това. Ето я и формулата:
=LEFT(J149;13)& IF(MOD(VALUE(LEFT(J149;1))*3+VALUE(MID(J149;2;1))*1+VALUE(MID(J149;3;1))*3+VALUE(MID(J149;4;1))*1+VALUE(MID(J149;5;1))*3+VALUE(MID(J149;6;1))*1+VALUE(MID(J149;7;1))*3+VALUE(MID(J149;8;1))*1+VALUE(MID(J149;9;1))*3+VALUE(MID(J149;10;1))*1+VALUE(MID(J149;11;1))*3+VALUE(MID(J149;12;1))*1+VALUE(MID(J149;13;1))*3;10)=0;0;10-MOD(VALUE(LEFT(J149;1))*3+VALUE(MID(J149;2;1))*1+VALUE(MID(J149;3;1))*3+VALUE(MID(J149;4;1))*1+VALUE(MID(J149;5;1))*3+VALUE(MID(J149;6;1))*1+VALUE(MID(J149;7;1))*3+VALUE(MID(J149;8;1))*1+VALUE(MID(J149;9;1))*3+VALUE(MID(J149;10;1))*1+VALUE(MID(J149;11;1))*3+VALUE(MID(J149;12;1))*1+VALUE(MID(J149;13;1))*3;10))

Клетката J149 съдържа 14 цифрен номер от сорта на
33800052200086 или
13800052232018 или
93800042201205 или
33800052201175 ... и т. н
Мъча се поне да си изясня идеята на алгоритъма, че да мога да напиша аналогична функция за php. Цялата тази формула връща пак такъв дълъг номер, но малко по-различен.

Пример 1
Колона J --------------- Резултат
33800042200383 | 33800042200387
33800042210085 | 33800042210089
33800042200086 | 33800042200080
33800042232018 | 33800042232012

Пример 2
Колона J --------------- Резултат
13800042200383 | 13800042200383
13800042210085 | 13800042210085
13800042200086 | 13800042200086
13800042232018 | 13800042232018

Пример 3
Колона J --------------- Резултат
13800082200383 | 13800082200381
13800082210085 | 13800082210083
13800082200086 | 13800082200084
13800082232018 | 13800082232016

редактиран от insecteater на 06.12.12 12:37
insecteater
Чет, 06.12.12, 15:32
Оказа се, че алгоритъма е същия, както при изчисляване на баркода EAN13 с тази разлика, че взема предвид 13 цифри за да изчисли 14-тата контролна, а не 12.

Ето функциите (валидацията съм я правил на друго място, и затова не е включена вътре), ако на някой му притрябва нещо подобно:
//Изчисляване на последната контролна цифра на EAN13 баркод
//$num - 12 цифри
function ean13_lastdigit($num) {
	$total = 0;
	for ($pos = 12; $pos >= 0; $pos--) {
		if ($pos % 2 == 0)
			$total = $total + (int)$num[$pos];
		else
			$total = $total + (int)$num[$pos] * 3;
	}
	$remainder = 10 - ($total % 10);
	$remainder = $remainder % 10;
	return $remainder;
}
 
//Изчисляване на транспортен код в зависимост от баркода и вида на транспортната опаковка
//$firstdigit - 1, 3, 6 или 9 - в зависимост от начина на опаковане на продуктите в транспортната опаковка
//$ean13 - тринадесетцифрен EAN13 баркод
function convertto_GTIN($firstdigit, $ean13) {
	$total = 0;
	$t1 = (int) $firstdigit . $ean13;
	$t2 = substr ($t1 , 0, 13);
	for ($pos = 0; $pos <= 12; $pos++) {
		if ($pos % 2 !== 0)
			$total = $total + (int) $t1[$pos];
		else
			$total = $total + (int) $t1[$pos] * 3;
	}
	$remainder = 10 - ($total % 10);
	$remainder = $remainder % 10;
	return $t2.$remainder;
}

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.