https://www.venkel.com/media/wysiwyg/categories/docs/0603-marking-code-venkel.pdf
Small resistors are marked with a position code and a multiplier letter according to standard EIA-96. The above example shows E96 values and multipliers. The position is already found and separated from the decade multiplier; should be a short step to derive the expected code for that value, or find a value from its code.
Z: 0.01
R(Y): 0.1
X: 1
A: 10
H(B): 100
C: 1,000
D: 10,000
E: 100,000
F: 1,000,000
So, 01X should be 10 ohms. 01C should be 1 kΩ, and so on. Letters in parentheses are being deprecated for readability.
FROM hobby-hour.com:
A chip resistor marked with the standard 3 digit code and a short bar below the marking denotes a precision (1% or less) resistor with a value taken from the E24 series (these values are usually reserved for 5% resistors). For example: 122 = 1.2kΩ 1%. Some manufacturers underline all three digits -- do not confuse this with the code used on low value current sensing resistors.
SMDs with values in order of milliohms, made for current sensing applications are often marked with the help of the letters M, m or L, showing the decimal point location (with the value in milliohms). For example: 1M50 = 1.50mΩ, 2M2 = 2.2mΩ, 5L00 = 5mΩ.
Current sensing SMDs can also be marked with a long bar on top (1m5 = 1.5mΩ, R001 = 1mΩ, etc.) or a long bar under the code (101 = 0.101Ω, 047 = 0.047Ω). The underline is used when the starting 'R' has to be omitted due to the limited space on the resistor's body. So, for example, R068 becomes 068 = 0.068Ω (68mΩ).
Request: Add functions to
1: generate the correct marking for a resistor of a given value
2: decode a marking to get a value.