Can I create a random number in an SSIS derived column
You don't actually have to alter your source data, but you can use a customised SQL command in your OLE DB Datasource.  Basically change the Data access mode from Table or view to SQL command or even SQL command from variable and create your statement to include your PIN code, something like this:

SELECT *, 1 + ABS(CHECKSUM(NEWID())) % 9999 PIN
FROM dbo.ssisTest


Test results:


No need for Derived Column, Script Task etc.  Make sense?

Another approach would be to assign some kind of arbitrary row id to your source table and a similar id to your unique account ids table and join on that, something like this:

SELECT *
FROM 
    (
    SELECT
        ROW_NUMBER() OVER( ORDER BY ( SELECT NULL ) ) rowId,
        *
    FROM dbo.ssisTest
    ) x
    INNER JOIN dbo.uniqueAccounts a ON x.rowId = a.rowId


Similar to the above approach, you can hold this SQL in your OLE DB Source without affecting your actual source data.  In order for this to work you must a) persist your unique accounts and give them an arbitrary row id and b) there must be more unique accounts than there are original records, eg generate a few million up front.