create or replace function f_pruefz_ean13(pin_ean number) return number is /****************************************************************************** *Heiko Hommes *10.11.2010 *Prüfziffernberechnung ean13 *Übergabe 12 stellige eannr *Rückgabe Prüfziffert ******************************************************************************/ va_ean varchar2(255) := ''; vn_prfz number := 0; begin va_ean := to_char(pin_ean); vn_prfz := to_number(substr(va_ean,1,1)) * 1 + to_number(substr(va_ean,2,1)) * 3 + to_number(substr(va_ean,3,1)) * 1 + to_number(substr(va_ean,4,1)) * 3 + to_number(substr(va_ean,5,1)) * 1 + to_number(substr(va_ean,6,1)) * 3 + to_number(substr(va_ean,7,1)) * 1 + to_number(substr(va_ean,8,1)) * 3 + to_number(substr(va_ean,9,1)) * 1 + to_number(substr(va_ean,10,1)) * 3 + to_number(substr(va_ean,11,1)) * 1 + to_number(substr(va_ean,12,1)) * 3 ; vn_prfz := (to_number(substr(to_char(vn_prfz),1, length(to_char(vn_prfz)) -2) || to_char(to_number(substr(to_char(vn_prfz),length(to_char(vn_prfz)) -1 ,1) + 1) * 10))) - vn_prfz ; return vn_prfz; exception when others then return null; end f_pruefz_ean13;