%dw 2.0
output application/json
import * from dw::core::Strings
var id="dddddfe001hhEEE"
var alphaNums = "ABCDEFGHIJKLMNOPQRSTUVWXYZ012345"
fun convertSfId(data)=
if(sizeOf(data) == 18) data
else if(sizeOf(data) != 15) null
else outerLoop()
fun outerLoop() = [0,1,2] reduce (oIndex, acc=id) -> (acc ++ alphaNums[innerLoop(oIndex)])
fun innerLoop(oIndex) = [0,1,2,3,4] reduce (iIndex, acc=0) -> innerAcc(oIndex, iIndex, acc)
fun innerAcc(oIndex, iIndex, acc) =
if(isUpperCase(id[(oIndex*5 + iIndex)]))
acc + (2 pow iIndex)
else
acc
---
convertSfId(id)